0

私はループと R 全般に不慣れです。そして、私はこの1つの問題について長い間waaaayを送っており、次の2日間は手動でそれを行うのに約1時間かかります.

そのため、統計の計算中にバックグラウンドでリスト (行列のように見える) を作成するパッケージがあります。各項目 (10 個の項目があります) には、データを抽出する必要があるこれらの「マトリックス検索リスト」の 1 つがあります。このリストには、5 つのグループを表す 5 つの行と 8 つの列があります。項目ごとに 3 つの列 ('Lo Score'=[,2]、'Hi Score=[,3]'、'Mean'=[,7]) を抽出する必要があります。次に、抽出したデータを 3 つのマトリックス (「ロー スコア」、「ハイ スコア」、「平均」) に変換します。行は 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

ここで行き詰まります...明示的に入力せずにこれらのベクトルを cbind するにはどうすればよいですか? すなわち。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 に答える