[英]R data.table fast add with binom.test
我试图运行binom.test
上data.table
与X,并规定每行的N值两者。 我看到了这篇文章,它使用了一个静态 N 值并试图修改,但如果我尝试我得到:
dt = data.table(X=rbinom(100, 625, 1/5), N=rbinom(100, 625, 4/5))
dt[, P := binom.test(x=X, n=N)$p.value ]
# Error in binom.test(x = X, n = N) : incorrect length of 'x'
该帖子还提到了聚合by=X
,但即使如此我仍然得到:
dt[, P := binom.test(x=X, n=N)$p.value, by=X ]
# Error in binom.test(x = X, n = N) : 'n' must be a positive integer >= 'x'
尽管 N 总是大于 X 的正整数。我的目标不是按 X 的值分组,但我希望每一行都有一个 binom.test p 值。
我们可以按每一行分组并对其应用binom.test
。
library(data.table)
dt[, P := binom.test(x=X, n=N)$p.value, seq_len(nrow(dt))]
#which is same as
#dt[, P := binom.test(x=X, n=N)$p.value, 1:nrow(dt)]
我们可以使用Map
来遍历 'X' 和 'N' 的每个对应元素
library(data.table)
dt[, P := unlist(Map(function(x, y) binom.test(x = x, n = y)$p.value, X, N))]
head(dt)
# X N P
#1: 104 510 3.737474e-43
#2: 137 501 8.640380e-25
#3: 140 517 3.982312e-26
#4: 131 498 6.476382e-27
#5: 114 506 1.000591e-36
#6: 120 507 8.940756e-34
或者没有匿名函数调用
dt[, P := sapply(Map(binom.test, x = X, n = N), `[[`, "p.value")]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.