如何存储字符串(例如,列范围"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
应该具有哪种格式的提示已经是一个受欢迎的开始。
答案 0 :(得分:4)
您错过了表达式中的eval
,还需要在subset
内library(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
旁边的select
或dplyr
library(dplyr)
select(mtcars, !! x)
,这是我们打算使用的地方:
y = parse_exprs("cyl:drat; vs:gear")
select(mtcars, !!! y)
或用于拼接表达式列表:
{{1}}