在R中加速Wilcox.test

时间:2014-04-10 20:14:44

标签: r performance

我目前正在尝试在多个数据集上实现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)。

1 个答案:

答案 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