【问题标题】:how to print for loop results in a upper triangular matrix in R如何在R中打印for循环导致上三角矩阵
【发布时间】:2013-07-15 16:08:18
【问题描述】:

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) 都在对角线中。请帮帮我。

提前谢谢你。

【问题讨论】:

  • 你的意思是你希望输出格式看起来像一个矩阵,或者你只想要上三角形中的条目?

标签: arrays string r algorithm excel


【解决方案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 的上三角形并将累积的结果分配给它

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() 的所有输出放入一个向量中,而不是打印每个中间结果。

【讨论】:

    【解决方案2】:

    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)]
    

    【讨论】:

      【解决方案3】:

      反正你是在遍历索引,你还不如在做的时候填充一个矩阵。

      例如:

      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)
      

      【讨论】:

      • 感谢大家的快速回复。你的答案真的很有帮助。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多