如何将glue函数输出转为R对象而非字符类型?
解决glue输出无法作为R对象直接使用的问题
你当前的代码里,str_glue输出的是字符型的代码文本,直接套as.factor()只会把这个字符串当成单个因子水平,自然得不到想要的iris物种列结果。要让glue生成的代码文本真正执行,有两种常用思路:
方法1:解析并执行字符串代码
用eval(parse(text = ...))组合来解析glue生成的字符串,让R把它当成代码执行:
library(glue) # 执行glue生成的代码文本 eval(parse(text = str_glue("as.factor(iris$`{colnames(iris[5])}`)")))
运行后就能得到和直接写as.factor(iris$Species)完全一致的结果。
方法2:直接用R对象索引(更高效安全)
其实没必要绕glue的弯路,直接用R的索引语法就能直接提取目标列并转因子,比生成字符串再解析更高效,也避免了parse/eval的安全风险:
# 用[[索引列名 as.factor(iris[[colnames(iris[5])]]) # 或者直接用列位置索引,更简洁 as.factor(iris[, 5])
为什么原代码不行?
原代码里str_glue("iris${colnames(iris[5])}")返回的是字符串"iris$Species",as.factor()处理这个字符串时,只会把它当作一个单独的因子值,所以结果只有iris$Species``这一个水平,完全不是你要的iris物种列数据。
内容的提问来源于stack exchange,提问作者GuiBridi
相关产品推荐
相关产品推荐

