R语言绘制Scree Plot报错:argument is of length zero 求助
问题:使用psych包绘制碎石图时出现报错
报错信息:Error in if (nvar != dim(rx)[1]) { : argument is of length zero
用户的R代码及运行输出:
> library(psych) > > evsmoke <- eigen(cor(smoke_data)) # get eigenvalues > evsmoke eigen() decomposition $values [1] 5.0235537 1.1024931 0.5978259 0.3411405 0.3084539 0.2482748 0.2253735 0.1528846 $vectors [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [1,] 0.3931577 -0.16571231 -0.3101335 0.2912494 0.23589165 0.05351944 -0.08054941 0.756280417 [2,] -0.3675943 0.25180984 0.4769817 -0.3396868 -0.06445788 0.02456049 0.26511873 0.619291236 [3,] 0.3717502 -0.17776988 -0.2234155 -0.7215427 0.03670089 -0.45944142 0.21731298 -0.001743783 [4,] -0.3011176 -0.57722629 0.1481459 -0.2600885 0.60141194 0.24581963 -0.25052988 -0.040693118 [5,] 0.3859358 -0.12245986 0.1306553 -0.3278663 -0.46591989 0.66115072 -0.23798028 0.025569550 [6,] -0.2555107 -0.70373118 -0.0434621 0.2033157 -0.51156603 -0.11401564 0.33783711 0.086123137 [7,] 0.3419065 -0.17517469 0.6915554 0.1796762 -0.05691227 -0.45195408 -0.36646867 0.008973832 [8,] 0.3876844 -0.05847006 0.3274681 0.1743551 0.30844266 0.26577512 0.71285755 -0.186300292 > evsmoke$values [1] 5.0235537 1.1024931 0.5978259 0.3411405 0.3084539 0.2482748 0.2253735 0.1528846 > > scree(evsmoke, pc=FALSE) Error in if (nvar != dim(rx)[1]) { : argument is of length zero
解决方法
报错原因是psych::scree()函数不支持直接传入eigen()返回的完整列表对象,它无法从中正确提取维度信息,导致条件判断失败。可以通过以下几种方式解决:
方法一:直接传入特征值向量
提取eigen()结果中的values部分传入函数:scree(evsmoke$values, pc=FALSE)方法二:直接传入相关矩阵
让scree()函数自行计算特征值并绘图:scree(cor(smoke_data), pc=FALSE)方法三:传入主成分分析结果
先使用principal()函数完成主成分分析,再将结果传入scree():pc_smoke <- principal(smoke_data, nfactors = ncol(smoke_data)) scree(pc_smoke, pc=FALSE)
内容的提问来源于stack exchange,提问作者Theo
相关产品推荐
相关产品推荐

