1

我有一个样本列表,每个样本的长度都不同。我需要比较列表中所有样本的样本均值(使用 Mann-Whitney-Wilcoxon 检验)。当前代码如下:

wilcox.v = list() ##This creates the list of samples
for (i in df){
    treat = list(i$treatment)
    wilcox.v = c(wilcox.v,treat)
}
###This *should* iterate over all items in the list
wilcox = sapply(wilcox.v, function(i){ wilcox.test(as.numeric(wilcox.v[i,]), as.numeric(wilcox.v[-i,]), exact = FALSE)$p.value
})

我想让函数返回一个 p 值向量,以便更广泛的函数可以在必要时重新采样。

问题似乎在于需要将样本均值与列表中的所有其他样本均值进行比较。

我确信有一种简单的方法可以做到这一点(我认为这与正确调用索引有关),但我不确定!

4

2 回答 2

0

正如 joran 所说,你写的 apply 函数有点不靠谱。有两种方法可以解决这个问题。

  1. 修改它i实际上是一个索引引用:

    wilcox = sapply(1:length(wilcox.v)
               ,function(i){ wilcox.test(as.numeric(wilcox.v[[i]])
               ,as.numeric(wilcox.v[[-i]]), exact = FALSE)$p.value
               })
    
  2. 修改您的函数,使其适当地视为i列表元素。我将把这个作为练习留给你(主要是因为我不想处理这个wilcox.v[-i,]词。

于 2013-09-26T23:40:17.930 回答
0

谢谢你的帮助!这是我最终使用的解决方案。它几乎不优雅,但它完成了工作。

mannwhit = vector()
for (i in mannwhit.v){
    for (j in mannwhit.v){
        if (identical(i,j) == FALSE){
            p.val = wilcox.test(i, j, paired=FALSE)$p.value
            mannwhit = c(mannwhit, p.val)
        }
    }
}
于 2013-09-28T02:08:05.533 回答