R语言FOR循环执行结果异常,单独运行步骤正常,求技术支持
问题原因
你循环里的list[[i]]取的是字符串"a2012"、"a2013",而非你定义的向量a2012、a2013。str_count("a2012", "al,")统计的是字符串"a2012"里"al,"的出现次数,这个字符串里根本没有"al,",所以结果为0,sum后自然也是0。
解决方案
有两种常用修正方式:
方式1:用get()函数获取变量
通过get()根据字符串名称获取对应的变量,修改循环内代码即可:
library(stringr) # 避免用list当变量名,覆盖内置函数 name_list <- c("a2012","a2013") a2012 <- c("al,","al,rb,","cu,pvc,") a2013 <- c("ab,al,","al,cu,","pvc,al,") output <- vector("integer") for(i in seq_along(name_list)) { current_vec <- get(name_list[[i]]) output[[i]] <- sum(str_count(current_vec,"al,")==1) } output # [1] 2 3
方式2:直接将向量存入列表(更推荐)
不要存变量名字符串,直接把目标向量放进列表,循环时直接取列表元素:
library(stringr) # 直接存储向量的列表 data_list <- list( a2012 = c("al,","al,rb,","cu,pvc,"), a2013 = c("ab,al,","al,cu,","pvc,al,") ) output <- vector("integer", length(data_list)) for(i in seq_along(data_list)) { output[[i]] <- sum(str_count(data_list[[i]],"al,")==1) } output # [1] 2 3
内容的提问来源于stack exchange,提问作者gr0eatadan
相关产品推荐
相关产品推荐

