繁体   English   中英

R data.table 使用 binom.test 快速添加

[英]R data.table fast add with binom.test

我试图运行binom.testdata.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM