r在for I循环中将特征向量复制到矩阵中表现得很奇怪



我有点糊涂了。矩阵A有8个特征值,有些是复特征值,有些是实特征值。我只想复制特征向量对应于实特征值作为列到矩阵M中,否则列应该被0填充。我使用代码:

M <- matrix(,ncol=8,nrow=8)
for(i in 1:8) {
M[,i] <- ifelse(Im(eigen(A)$val[i]) == 0, eigen(A)$vec[,i], 0)
}

,但结果就像我执行了这个:

M <- matrix(,ncol=8,nrow=8)
for(i in 1:8) {
M[,i] <- ifelse(Im(eigen(A)$val[i]) == 0, eigen(A)$vec[**1**,i], 0)
}

(实际上生成的输出与上面的代码完全相同)。我的误解在哪里?

我通过R-help@r-project.org找到了解决方案:这不是矩阵或I循环行为的问题,这是一个ifelse的问题,在R中的行为与c中的例子非常不同,所以处理我的想法的正确方法是:

for(i in 1:8) {
M[,i] <- if(Im(eigen(A)$val[i]) == 0) eigen(A)$vec[,i] else 0
}

相关内容

最新更新