R语言循环中如何操作反引号包裹的含空格变量完成批量赋值
解决方案
错误原因
- 你写的
`sample i`属于R的非标准名称字面量,R会直接识别为名称是sample i的对象,不会把i解析为循环变量,因此会提示对象不存在。 - 不带反引号直接写
print(sample 1)会报错,是因为R默认将空格识别为代码分隔符,会把sample和1识别为两个独立的语法元素,不符合语法规则。
修复方法
你只需要用get()函数,传入拼接好的变量名字符串,就能动态获取对应名称的变量,不需要手动加反引号:
# 沿用你之前定义的非连续样本编号 suffix <- c(1,10:18,2:9) for (s in suffix) { # 拼接原变量名称,用get()获取对应值 origin_var_name <- paste("sample", s) current_sample <- get(origin_var_name) # 赋值给新的flowdata开头变量,编号和样本编号完全对应 new_var_name <- paste0("flowdata", s) assign(new_var_name, current_sample) }
运行后你就可以直接调用flowdata1、flowdata10等变量,内容和对应的`sample 1`、`sample 10`完全一致。
更推荐的实践方案
其实你完全不需要把拆分后的子列表赋值为全局独立变量,直接使用你之前生成的split.names命名列表会更方便管理,不需要处理非标准名称的反引号问题:
- 取单个样本:
split.names[["sample 1"]] - 循环处理所有样本:
for (sample_name in names(split.names)) { current_sample <- split.names[[sample_name]] # 这里直接写你要对样本执行的处理逻辑即可 }
这种方式可以避免全局环境出现大量零散变量,后续排查错误、批量处理的效率都会高很多。
内容的提问来源于stack exchange,提问作者carolina671
相关产品推荐
相关产品推荐

