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 回答
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)]
于 2013-07-15T16:17:17.707 回答