如何在R语言中对Matrix的Diagonal元素施加条件

itf*_*com 1 r matrix

我在R语言工作.我想强加条件,如果矩阵的任何上对角线元素大于0.5,那么它会在输出中打印它.

我使用以下代码,但它打印的不是对角线元素,不是必需的.

for(i in 1:ncol(X))

for (j in i+1:ncol(X)-i){
if(mat(X)[i,j]>0.5)

#upper.tri(cor(X),diag=F)

cat(i,",",j," th element", " > 50%","\n")
}
Run Code Online (Sandbox Code Playgroud)

提前致谢

G. *_*eck 5

1)注意,无论是(作为两个取消的实例)都不i+1:ncol(X)-i等于你想要的.1:ncol(X)ii

2)另请注意,这可以在没有循环的情况下完成:

# create test matrix
set.seed(123)
m <- matrix(runif(25), 5)

# ix selects large elements
ix <- m > .5 & upper.tri(m)
s <- sprintf("\nm[%d, %d] = %f > 0.5", row(m)[ix], col(m)[ix], m[ix])
Run Code Online (Sandbox Code Playgroud)

显示如下:

> cat(s, "\n")

m[1, 3] = 0.956833 > 0.5 
m[1, 4] = 0.899825 > 0.5 
m[1, 5] = 0.889539 > 0.5 
m[2, 5] = 0.692803 > 0.5 
m[3, 5] = 0.640507 > 0.5 
m[4, 5] = 0.994270 > 0.5
Run Code Online (Sandbox Code Playgroud)

m上面使用的矩阵是:

> m
          [,1]      [,2]      [,3]       [,4]      [,5]
[1,] 0.2875775 0.0455565 0.9568333 0.89982497 0.8895393
[2,] 0.7883051 0.5281055 0.4533342 0.24608773 0.6928034
[3,] 0.4089769 0.8924190 0.6775706 0.04205953 0.6405068
[4,] 0.8830174 0.5514350 0.5726334 0.32792072 0.9942698
[5,] 0.9404673 0.4566147 0.1029247 0.95450365 0.6557058
Run Code Online (Sandbox Code Playgroud)