我目前正在尝试在多个数据集上实现Wilcoxon Ranksum,我将它组合成一个大矩阵A,即705x17635(即我想运行rankum测试17,635次。唯一的方法是我&# 39;我已经看过如何在不使用forloops的情况下做到这一点是lapply,我已经将其作为
运行> lapply(data.frame(A), function(x)
wilcox.test(x,b,alternative="greater",exact=FALSE,correct=FALSE))
其中b是我们的阴性对照数据,是20000x1载体。然而,运行这个需要很长时间(我在30分钟后放弃了),我想知道是否有更快的方法来运行它,特别是因为我可以在MATLAB中执行相同的过程(即使有一个forloop)大约五分钟(我出于各种原因需要使用R)。
答案 0 :(得分:2)
有些软件包试图解决此问题。即:
A <- matrix(rnorm(705*17635), nrow=705)
b <- rnorm(20000)
library(matrixTests)
res <- col_wilcoxon_twosample(A, b) # running time: 83 seconds
结果中的几行:
res[1:2,]
obs.x obs.y obs.tot statistic pvalue alternative location.null exact corrected
1 705 20000 20705 6985574 0.6795783 two.sided 0 FALSE TRUE
2 705 20000 20705 7030340 0.8997009 two.sided 0 FALSE TRUE
检查结果是否与按列进行wilcox.test()
相同:
wilcox.test(A[,1], b)
Wilcoxon rank sum test with continuity correction
data: A[, 1] and b
W = 6985574, p-value = 0.6796
alternative hypothesis: true location shift is not equal to 0