[英]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.