我如何存储一个字符串(例如,列范围 "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
应该已经是一个受欢迎的开始。
最佳答案
你错过了表达式中的 c()
,你还需要在 subset
中eval
你的表达式:
library(rlang)
x <- parse_expr("c(cyl:drat, vs:gear)")
subset(mtcars, select=eval(x))
parse_expr
等同于 base R 中的 parse
:
x2 = parse(text="c(cyl:drat, vs:gear)")
subset(mtcars, select=eval(x2))
您还可以将 parse_expr
或 parse_exprs
与 select
from dplyr
一起使用,这是它的目的被使用:
library(dplyr)
select(mtcars, !! x)
或用于拼接表达式列表:
y = parse_exprs("cyl:drat; vs:gear")
select(mtcars, !!! y)
关于r - 将字符串转换为函数的非字符串输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47225650/