R语言如何正确求值动态变量名对应的字面量字符向量
问题原因
你当前的写法存在两层求值逻辑的缺失:paste0(question_stem, "_my_vector")生成的是变量名字符串"QXX_my_vector",eval(parse(text = 变量名字符串))仅能获取到QXX_my_vector这个变量存储的原始值(也就是那个带转义引号的c表达式字符串),不会自动对这个字符串做二次解析求值,和你最初直接把QXX_my_vector的变量值传给parse的逻辑不一致。你之前用sym函数返回结果相同也是同理,仅生成了变量名符号,没有先求值拿到存储的表达式字符串。
解决方法
方法1:分两步取值解析(可读性最高)
先通过动态变量名拿到存储的表达式字符串,再对字符串做解析求值:
question_stem = "QXX" # 第一步:获取动态名称变量的存储值 vec_str <- get(paste0(question_stem, "_my_vector")) # 第二步:解析表达式字符串 result <- eval(parse(text = vec_str))
运行后即可得到目标字符向量:"Element 1" "Element 2" "Element 3" "Element 4"
方法2:一行嵌套写法
也可以直接嵌套逻辑写为一行:
result <- eval(parse(text = get(paste0(question_stem, "_my_vector"))))
方法3:正则提取(更安全,无代码注入风险)
如果不需要兼容复杂表达式,仅针对当前这种引号包裹元素的格式,可以用正则直接提取内容,避免eval(parse的安全隐患:
library(stringr) result <- str_extract_all(get(paste0(question_stem, "_my_vector")), '(?<=").+?(?=")')[[1]]
内容的提问来源于stack exchange,提问作者deschen
相关产品推荐
相关产品推荐

