2016-08-16 33 views
1

我有2個函數,我在mutate調用中使用。每行結果的一種生產如預期,而其他重複的所有行相同的值:與dplyr變異評估訂單不一致

library(dplyr) 

df <- data.frame(X = rpois(5, 10), Y = rpois(5,10)) 

pv <- function(a, b) { 
    fisher.test(matrix(c(a, b, 10, 10), 2, 2), 
       alternative='greater')$p.value 
} 

div <- function(a, b) a/b 

mutate(df, d = div(X,Y), p = pv(X, Y)) 

產生類似:

X Y   d   p 
1 9 15 0.6000000 0.4398077 
2 8 7 1.1428571 0.4398077 
3 9 14 0.6428571 0.4398077 
4 11 15 0.7333333 0.4398077 
5 11 7 1.5714286 0.4398077 

d列各不相同,但v是常量,其值實際上並不對應任何行中的XY值。

我懷疑這與NSE有關,但我不知道怎麼從litlle中找到它。

什麼說明divpv的不同行爲?如何修復pv

回答

4

我們需要rowwise

df %>% 
    rowwise() %>% 
    mutate(d = div(X,Y), p = pv(X,Y)) 
# X  Y  d   p 
# <int> <int> <dbl>  <dbl> 
#1 10  9 1.111111 0.5619072 
#2 12  8 1.500000 0.3755932 
#3  9  8 1.125000 0.5601923 
#4 11 16 0.687500 0.8232217 
#5 16 10 1.600000 0.3145350 

在OP的代碼,該pv走的是 'X' 和 'Y' 列作爲輸入,它給出了一個單一的輸出。


或者正如@Frank所提到的,可以使用mapply

df %>% 
    mutate(d = div(X,Y), p = mapply(pv, X, Y))