将字符串转换为函数的非字符串输入

时间:2017-11-10 15:01:43

标签: r naming

如何存储字符串(例如,列范围"cyl:drat, vs:gear")以便我可以在被解释为字符串的函数中使用它?

例如,我想执行以下命令:

subset(mtcars, select=c(disp:drat, vs:gear))   

但是将select的内容分配给变量x

x <- as.name("cyl:drat, vs:gear")
subset(mtcars, select=x)
#Error in x[j] : invalid subscript type 'symbol'

library(rlang)
x <- quo(!! sym("cyl:drat, vs:gear"))
subset(mtcars, select=x)
#Error in x[j] : invalid subscript type 'language'

x <- parse_expr("cyl:drat, vs:gear")
subset(mtcars, select=x)
#Error in x[j] : invalid subscript type 'language'

分配x <-"cyl"有效,但x <-"cyl:drat"同样失败。

关于x应该具有哪种格式的提示已经是一个受欢迎的开始。

1 个答案:

答案 0 :(得分:4)

您错过了表达式中的eval,还需要在subsetlibrary(rlang) x <- parse_expr("c(cyl:drat, vs:gear)") subset(mtcars, select=eval(x)) 表达{/ 1}}:

parse_expr

parse相当于基数R中的x2 = parse(text="c(cyl:drat, vs:gear)") subset(mtcars, select=eval(x2))

parse_expr

您还可以使用parse_exprs旁边的selectdplyr library(dplyr) select(mtcars, !! x) ,这是我们打算使用的地方:

y = parse_exprs("cyl:drat; vs:gear")
select(mtcars, !!! y)

或用于拼接表达式列表:

{{1}}