簡體   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