R语言sum函数报错:invalid 'type'(character) of argument 原因排查
问题解答
是,ids的character类型确实是引发此次报错的直接原因,具体分析如下:
报错根源
你的代码中:
parent = ids[i]会把字符型的ids元素赋值给parent,导致parent也属于character类型。sum(parent)函数要求输入必须是数值型(integer/numeric),直接对字符型变量调用sum(),就会触发你看到的报错:
Error in sum(parent): invalid 'type' (character) of argument
另外,代码里的if(parent > 1)也存在隐患:字符与数值直接比较时,R会尝试隐式转换,但如果ids中包含无法转换为数值的字符,这一步也会触发错误。
修正方案
- 先将
parent转换为数值型(前提是ids中的字符都是可转换为数值的有效内容); - 由于
parent是单个值,sum(parent)完全多余,直接用parent > 1作为循环条件即可。
修正后的代码示例:
for(i in 1:length(ids)) { print(paste0(i," of ",length(ids))) parent = as.numeric(ids[i]) # 转换为数值型 # 先检查转换后是否为有效数值,避免NA引发错误 if(!is.na(parent) && parent > 1) { while(parent > 1) { # 直接用parent判断,替换sum(parent) childs_location = grep(paste0("^",parent, "$"), nodes[, 1]) parents_id = nodes[childs_location,2] # 同步转换parents_id为数值型,避免后续循环再次触发类型错误 parents_id = as.numeric(parents_id) path[[i]] = c(path[[i]], parents_id) parent = parents_id } } }
如果ids中存在无法转换为数值的字符,建议先过滤这些无效值,或者在转换时做异常处理。
内容的提问来源于stack exchange,提问作者Sufia Akter Neha
相关产品推荐
相关产品推荐

