首页 > 解决方案 > 如何通过R下的for循环将Wilcoxon测试应用于矩阵的每一行

问题描述

我是 R 新手,我有一个简单的问题,如何将 Wilcoxon 检验应用于 R 下矩阵的每一行?例如,作为最简单的矩阵。我正在尝试通过 for 循环将 Wilcoxon 测试应用于每一行,两组列,第 1 到第 5 列作为一组,第 6 到 10 列作为另一组。并将 P 值作为列保存到文件中。我写了两个 for 循环但失败了。我把我的 for 循环和错误信息放在最后。太感谢了。

mymatrix
       [,1][,2] [,3]  [,4] [,5] [,6] [,7] [,8] [,9]  [,10]
 [1,]    1   11   21   31   41   51   61   71   81    91
 [2,]    2   12   22   32   42   52   62   72   82    92
 [3,]    3   13   23   33   43   53   63   73   83    93
 [4,]    4   14   24   34   44   54   64   74   84    94
 [5,]    5   15   25   35   45   55   65   75   85    95
 [6,]    6   16   26   36   46   56   66   76   86    96
 [7,]    7   17   27   37   47   57   67   77   87    97
 [8,]    8   18   28   38   48   58   68   78   88    98
 [9,]    9   19   29   39   49   59   69   79   89    99
[10,]   10   20   30   40   50   60   70   80   90   100



     for (i in nrow(mymatrix)){
           vector1 <- c(mymatrix[i,1:5]) 
            vector2 <- c(mymatrix[i,6:10])
             wilcox.test(vector1,vector2, paired = TRUE, alternative = "two.sided")
         }

    #Warning message:
    In wilcox.test.default(vector1, vector2, paired = TRUE, alternative = "two.sided") :
    cannot compute exact p-value with ties

    # I also tried this, it doesn't work either.

 for (i in nrow(mymatrix)){
  wilcox.test(as.numeric(mymatrix[i,1:5],as.numeric(mymatrix[i,6:10]), paired = TRUE)
 }

标签: rmatrixrowmultiple-columns

解决方案


您正在寻找这样的东西:

# initialize a list to store the p_values
p_values <- vector("list", nrow(mymatrix))

for(i in seq_along(1: nrow(mymatrix))){
  p_values[i] = wilcox.test(mymatrix[i,1:5],mymatrix[i,6:10], paired = TRUE, alternative = "two.sided", exact = FALSE)$p.value

}
# make it a data.frame
p_values = data.frame(p_values = sapply(p_values, c))
#Output
p_values

#     p_values
# 1  0.03688843
# 2  0.03688843
# 3  0.03688843
# 4  0.03688843
# 5  0.03688843
# 6  0.03688843
# 7  0.03688843
# 8  0.03688843
# 9  0.03688843
# 10 0.03688843

希望有帮助。


推荐阅读