R语言for循环如何将向量元素识别为对象而非字符串
R循环对象识别问题修复方案
你对问题的判断正确,循环变量i存储的是segmente向量里的字符串值,直接使用i会读取字符串本身而非第一步创建的同名tibble对象,调用get()函数即可根据字符串名称获取对应内存对象。
修复后完整代码
library(tibble) df <- tibble(hallo1 = "test", hallo2.1 = "test", bye1 = "test", bye2.1 = "test") segmente <- c("hallo", "bye") for(i in segmente){ assign(i, df[grepl(i, names(df))]) # 第一步保留原有逻辑 # 第二步修改:用get(i)获取第一步生成的同名对象,再筛选列 assign(paste0(i, "_1"), get(i)[!grepl("\\.", names(get(i)))]) }
运行后生成的hallo_1和bye_1均为仅含不带.列的tibble:
hallo_1仅保留hallo1列bye_1仅保留bye1列
更简洁的优化写法
你也可以把第一步生成的对象存在临时变量里,避免重复调用get(),执行效率更高、逻辑更清晰:
library(tibble) df <- tibble(hallo1 = "test", hallo2.1 = "test", bye1 = "test", bye2.1 = "test") segmente <- c("hallo", "bye") for(i in segmente){ tmp_df <- df[grepl(i, names(df))] assign(i, tmp_df) assign(paste0(i, "_1"), tmp_df[!grepl("\\.", names(tmp_df))]) }
内容的提问来源于stack exchange,提问作者user13267770
相关产品推荐
相关产品推荐

