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

R 将函数的字符串转换为非字符串输入,r,naming,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'

如何存储字符串(例如,列范围
“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您在表达式中遗漏了
c()
,您还需要
eval
您在
子集中的表达式:

library(rlang)

x <- parse_expr("c(cyl:drat, vs:gear)")
subset(mtcars, select=eval(x))
您还可以使用
parse_expr
parse_expr
并从
dplyr
中选择
,这是它的预期用途:

library(dplyr)

select(mtcars, !! x)
或用于拼接表达式列表:

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