我有一個正定對稱矩陣。粘貼使用以下代碼生成的矩陣:
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] <- NA
迭代2:x[1,3] = x[3,1] <- NA
等等....
我的想法是使用 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 時,它就會退出回圈。
感謝這里的任何幫助。
謝謝
uj5u.com熱心網友回復:
如果您需要迭代地完成替換,您可以使用 表示的值的索引逐upper.tri(x)/lower.tri對進行替換。這將允許您在每次替換之前/之后將結果傳遞給函式,例如:
sel <- sapply(c(lower.tri, upper.tri), \(f) which(f(mat)) )
# [,1] [,2]
#[1,] 2 4 ##each row represents the lower/upper pair
#[2,] 3 7
#[3,] 6 8
for( i in seq_len(nrow(sel)) ) {
mat[ sel[i,] ] <- NA
print(mean(mat, na.rm=TRUE))
}
#[1] 0.2812249
#[1] 0.5581359
#[1] 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/345345.html
