如何将for循环与if语句的输出转为列表/向量?R代码报错求助
问题解决:append函数报错及布尔列表生成优化
错误原因分析
- append参数缺失:R的
append()函数必须传入两个参数:第一个是要追加元素的目标对象,第二个是要添加的values。你写的append(0)只传了values,缺少目标对象,导致报错。 - 语法错误:
Cobalt_row.append(1)不是R的合法语法,R不支持这种点调用的方式添加元素。 - 循环内重置对象:每次循环都把
Cobalt_row重新赋值为lst(),会清空之前循环的结果,最终只能得到最后一次循环的输出。
修正方案
方案1:修正循环写法
先初始化一个空向量,每次循环将1或0追加到向量中:
library(stringr) # 初始化空向量 Cobalt_row <- c() for (rowz in final_data$Ingridients) { if (sum(str_detect(rowz, 'Cobalt')) > 0) { Cobalt_row <- append(Cobalt_row, 1) } else { Cobalt_row <- append(Cobalt_row, 0) } } print(Cobalt_row)
方案2:更高效的向量化操作(推荐)
R的核心优势是向量化运算,完全不需要循环,一行代码就能实现需求:
library(stringr) # str_detect返回布尔值,as.integer自动将TRUE转1,FALSE转0 Cobalt_row <- as.integer(str_detect(final_data$Ingridients, 'Cobalt')) print(Cobalt_row)
这个方法比循环更快,代码也更简洁易读。
内容的提问来源于stack exchange,提问作者Mimi
相关产品推荐
相关产品推荐

