【发布时间】:2021-12-16 16:30:03
【问题描述】:
我有一个正定对称矩阵。粘贴使用以下代码生成的矩阵:
set.seed(123)
m <- genPositiveDefMat(
dim = 3,
covMethod = "unifcorrmat",
rangeVar = c(0,1) )
x <- as.matrix(m$Sigma)
diag(x) <- 1
x
#Output
[,1] [,2] [,3]
[1,] 1.0000000 -0.2432303 -0.4110525
[2,] -0.2432303 1.0000000 -0.1046602
[3,] -0.4110525 -0.1046602 1.0000000
现在,我想通过迭代运行矩阵,并且在每次迭代中我想用 NA 替换对称对。例如,
迭代 1: x[1,2] = x[2,1]
迭代2: x[1,3] = x[3,1]
等等……
我的想法是使用 for 循环检查
原型:
for( r in 1:nrow(x)
for( c in 1:ncol(x)
if x[r,c]=x[c,r]<-NA
else
x[r,c]
我的代码的问题在于第 1 行和第 1 列,值相等,因此设置为 0(这是错误的)。此外,当它不是 NA 时,它就会退出循环。
在这里感谢任何帮助。
谢谢
【问题讨论】:
-
也许
upper.tri(x)和lower.tri(x)可能会帮助您消除对称性的一侧。 -
谢谢。但这一下子就全部取代了。我希望它在迭代中。每次迭代后,我都会将此输出传递给其他函数。因此,我希望它分步进行,而不是一次全部完成。从某种意义上说,在第一步中,只有第一对 - 1,2 和 2,1 应替换为 NA,其余矩阵应保持原样
-
将每个非对角项更改为
NA并在更改项之前,取出您想要的值?