2016-08-16 19 views
1

私はmutate呼び出しの中で2つの関数を使用しています。予想されるように、他のすべての行に対して同じ値を繰り返しながら一行結果ごとに生成:d列が変化する、すなわち評価順序とdplyr突然変異との矛盾

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 

が、vは一定であり、その値:

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)) 

ようなものを生成しますいずれの行の値もXYには実際には対応していません。

これはNSEに関係していると思われますが、どのような問題が発生しているのかわかりません。

divpvの異なる動作の原因は何ですか? pvを修正するにはどうすればよいですか?

答えて

4

我々はOPのコードで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 

を必要とし、pvは、入力として 'X' と 'Y' の列を取っているし、それは単一の出力を提供します。


または@Frankに述べたように、mapplyを用いることができる

df %>% 
    mutate(d = div(X,Y), p = mapply(pv, X, Y)) 
関連する問題