使用Matrix包sparseMatrix函数遇NA错误的原因排查与解决求助
错误原因
sparseMatrix的i和j参数必须传入从1开始的整数索引,但你直接传入了因子类型的列。虽然你的数据里没有NA值,但函数处理因子时,内部类型转换逻辑会产生隐性NA(比如无法将非数值型的因子水平直接解析为合法索引),因此触发了该错误。
解决办法
把因子列转换为整数索引即可,两种常用方式:
直接用
as.integer()转换因子:
因子转整数会返回其水平的位置序号(从1开始),刚好匹配你设置的dims = c(29, 29),修改后的代码如下:library(Matrix) sparseMatrix(as.integer(graph$src), as.integer(graph$dst), x = 1, dims = c(29, 29))如果因子水平是数值型(比如水平是
"1"/"2"这类数值字符串,或是直接的数字),也可以用这种方式转换:sparseMatrix(as.numeric(as.character(graph$src)), as.numeric(as.character(graph$dst)), x = 1, dims = c(29, 29))这种方式适合因子水平本身就是实际节点编号的场景,而非单纯的水平位置序号。
可选验证步骤
可以先确认转换后的索引合法:
# 检查转换后无NA all(!is.na(as.integer(graph$src))) all(!is.na(as.integer(graph$dst))) # 检查索引范围在1-29之间 all(as.integer(graph$src) %in% 1:29) all(as.integer(graph$dst) %in% 1:29)
内容的提问来源于stack exchange,提问作者Roberta
相关产品推荐
相关产品推荐

