2013-07-15 123 views
1

R中的腳本如下。如何打印循環導致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×7矩陣)?全部零(0)都在對角線上。請幫幫我。

謝謝你提前。

+1

你的意思是你想要格式化輸出看起來像一個矩陣,或者你只想要在上三角形的條目? –

回答

0

upper.tri可能是你在找什麼:

#Generating a reproducible 7x7 matrix: 
set.seed(1) 
m <- matrix(rexp(49, rate=.1), ncol=7) 
diag(m) <- rep(0, ncol(m)) 

#The calculation you're looking for: 
m[upper.tri(m, diag = FALSE)] 
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) 
+0

謝謝大家的快速回復。真正有用的你的答案。 – Jeewa

+0

請「接受」最適合您的一款! –

1

如果你只想打印結果作爲基體,然後使用這個虛擬數據

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

過程中會播放mi.empirical()累積輸出的作用,創建一個空矩陣

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

然後索引的上三角使用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()成一個單一的載體,雖然,而不是打印每個中間結果。