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)