0

一般来说,我是循环和 R 的新手;我已经在这个问题上花费了很多时间,并且在接下来的两天里,我离手动完成这件事还有很长的路要走。

因此,有一个包可以在计算统计数据时在后台创建列表(看起来像矩阵)。每个项目(有 10 个项目)都有我需要从中提取数据的“矩阵查找列表”之一。该列表有 5 行代表 5 个组和 8 列。我需要为每个项目提取 3 列('Lo Score'=[,2]、'Hi Score=[,3]' 和 'Mean'=[,7])。然后,我想将提取的数据转换为 3 个矩阵(“Lo Score”、“Hi Score”和“Mean”),其中行是 5 个组,列是项目 1-10。

这就是我可以手动创建平均矩阵的方法。“MDD.mean.s10”是我最后想要的矩阵。(注意 $results 之后的第一个括号是唯一改变 1-10 的部分(表示 10 个项目),最后一个括号是 [,7] 表示位于第 7 列中的平均值)

m.1a <- MC_MDD.noNA$results[[1]][[2]][,7]
m.2b <- MC_MDD.noNA$results[[2]][[2]][,7]
m.3c <- MC_MDD.noNA$results[[3]][[2]][,7]
m.4d <- MC_MDD.noNA$results[[4]][[2]][,7]
m.5e <- MC_MDD.noNA$results[[5]][[2]][,7]
m.6f <- MC_MDD.noNA$results[[6]][[2]][,7]
m.7g <- MC_MDD.noNA$results[[7]][[2]][,7]
m.8h <- MC_MDD.noNA$results[[8]][[2]][,7]
m.9i <- MC_MDD.noNA$results[[9]][[2]][,7]
m.10j <- MC_MDD.noNA$results[[10]][[2]][,7]
MDD.mean.s10 <- cbind(m.1a, m.2b, m.3c, m.4d, m.5e, m.6f, m.7g, m.8h, m.9i, m.10j)

MDD.mean.s10   

         m.1a      m.2b      m.3c      m.4d      m.5e      m.6f      m.7g      m.8h      m.9i     m.10j
[1,] 0.8707865 0.7393939 0.7769231 0.7591241 0.8533333 0.7925926 0.8258065 0.8410596 0.8843931 0.5638298
[2,] 0.8323353 0.7302632 0.5913978 0.5868263 0.6923077 0.6182796 0.6964286 0.6839080 0.7911392 0.3212121
[3,] 0.8726115 0.7159763 0.7117647 0.6163522 0.7987805 0.7105263 0.7613636 0.7674419 0.8034682 0.4011299
[4,] 0.9024390 0.7894737 0.7795276 0.6530612 0.8593750 0.7112676 0.8672566 0.8629032 0.9152542 0.4834437
[5,] 0.9861111 0.9102564 0.8452381 0.8160920 0.9726027 0.8658537 0.8352941 0.9342105 0.9466667 0.6454545

但我不能每次都手动执行此操作,因为这会在多个列表中一遍又一遍地出现。我已经想出了如何循环这个过程并命名向量:

for(i in 1:10){
assign(paste("m", i, sep = ""), MC_MDD.noNA$results[[i]][[2]][,7])
}

m1
[1] 0.8707865 0.8323353 0.8726115 0.9024390 0.9861111
m2
0.7393939 0.7302632 0.7159763 0.7894737 0.9102564
m3
[1] 0.7769231 0.5913978 0.7117647 0.7795276 0.8452381
m4
[1] 0.7591241 0.5868263 0.6163522 0.6530612 0.8160920
m5
[1] 0.8533333 0.6923077 0.7987805 0.8593750 0.9726027
m6
[1] 0.7925926 0.6182796 0.7105263 0.7112676 0.8658537
m7
[1] 0.8258065 0.6964286 0.7613636 0.8672566 0.8352941
m8
[1] 0.8410596 0.6839080 0.7674419 0.8629032 0.9342105
m9
[1] 0.8843931 0.7911392 0.8034682 0.9152542 0.9466667
m10
[1] 0.5638298 0.3212121 0.4011299 0.4834437 0.6454545

现在我在这里卡住了……我如何在不明确输入的情况下绑定这些向量?IE。mean.MDD <- cbind(m1,m2,m3,m4,m5,m6,m7,m8,m9,10)

我尝试过的一切都会覆盖数据而不是构建矩阵。基本上,我从一个零矩阵(5x10)开始。然后我在开始时得到了一些值,但其余的仍然是零。糟糕的代码示例:

fo <- matrix(0,5,10)
colnames(fo) <- paste('f', 1:10, sep = "")
fo
      f1 f2 f3 f4 f5 f6 f7 f8 f9 f10
[1,]  0  0  0  0  0  0  0  0  0   0
[2,]  0  0  0  0  0  0  0  0  0   0
[3,]  0  0  0  0  0  0  0  0  0   0
[4,]  0  0  0  0  0  0  0  0  0   0
[5,]  0  0  0  0  0  0  0  0  0   0
for(i in 1:10){
fo <- assign(paste("f", i, sep = ""), MC_MDD.noNA$results[[i]][[2]][,7])
}
fo
[1] 0.5638298 0.3212121 0.4011299 0.4834437 0.6454545

fo <- matrix(0,5,10)
colnames(fo) <- paste('f', 1:10, sep = "")
fo
      f1 f2 f3 f4 f5 f6 f7 f8 f9 f10
[1,]  0  0  0  0  0  0  0  0  0   0
[2,]  0  0  0  0  0  0  0  0  0   0
[3,]  0  0  0  0  0  0  0  0  0   0
[4,]  0  0  0  0  0  0  0  0  0   0
[5,]  0  0  0  0  0  0  0  0  0   0
for(i in 1:10){
fo <- cbind(assign(paste("f", i, sep = ""), MC_MDD.noNA$results[[i]][[2]][,7]))
}
fo
[,1]
[1,] 0.5638298
[2,] 0.3212121
[3,] 0.4011299
[4,] 0.4834437
[5,] 0.6454545

提前感谢您的帮助!!!(C:

4

1 回答 1

0

这应该会产生正确的结果:

sapply(MC_MDD.noNA$results, function(x) x[[2]][ , 7])

修改列号以生成高 ( [ , 3]) 和低 ( [ , 2]) 分数的矩阵。

于 2012-12-13T14:16:00.917 回答