1

R のスクリプトは次のとおりです。

   for (i in 1:(ncol(K)-1)) #ncol=7,K is dataset
     for (j in i:ncol(K)){
     print(mi.empirical(rbind(K[, i],K[,j])))
     }

出力は次のように与えられます

[1] 0
 [1] 0.1412579
 [1] 0.4597332
 [1] 0.382798
 [1] 0.1162086
 [1] 0.3379114
 [1] 0.4848073
 [1] 0
 [1] 0.3103481
 [1] 0.1556235
 [1] 0.02243661
 [1] 0.123117
 [1] 0.2290079
 [1] 0
 [1] 0.1460452
 [1] 0.3638203
 [1] 0.2569532
 [1] 0.1117262
 [1] 0
 [1] 0.1981758
 [1] 0.05325737
 [1] 0.03590259
 [1] 0
 [1] 0.1380921
 [1] 0.3007399
 [1] 0
 [1] 0.1032283

この結果を上三角行列 (7 x 7 行列) に出力する方法を教えてもらえますか? すべてのゼロ (0) は対角線にあります。私を助けてください。

よろしくお願いします。

4

3 に答える 3

1

結果を行列として印刷したいだけなら、このダミーデータを使用して

n <- 7
vec <- seq_len((0.5 * (n * (n-1)) + n)) ## dummy data, *inc* diagonal

からの累積出力の役割を果たしmi.empirical()、空の行列を作成します

mat <- matrix(ncol = 7, nrow = 7)

mat次に、 usingの上三角形にインデックスupper.tri(mat, diag = TRUE)を付け、累積結果をそれに割り当てます。

mat[upper.tri(mat, diag = TRUE)] <- vec

> mat
     [,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,]    1    2    4    7   11   16   22
[2,]   NA    3    5    8   12   17   23
[3,]   NA   NA    6    9   13   18   24
[4,]   NA   NA   NA   10   14   19   25
[5,]   NA   NA   NA   NA   15   20   26
[6,]   NA   NA   NA   NA   NA   21   27
[7,]   NA   NA   NA   NA   NA   NA   28

mi.empirical()ただし、各中間結果を出力するのではなく、すべての出力を単一のベクトルに入れる必要があります。

于 2013-07-15T16:22:19.060 に答える
0

とにかくインデックスをループしています。実行中にマトリックスを埋めることもできます。

例えば:

answers <- matrix(NA_character_, nrow=ncol(K) - 1, ncol=ncol(K))

for (i in 1:(ncol(K)-1))
  for (j in i:ncol(K)){
  answers[i, j] <- mi.empirical(rbind(K[, i],K[,j]))
}

print(answers)
于 2013-07-15T16:21:43.097 に答える