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

标签 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应该已经是一个受欢迎的开始。

最佳答案

你错过了表达式中的 c(),你还需要在 subseteval你的表达式:

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_exprparse_exprsselect 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/

相关文章:

r - 控制R markdown中ggplot循环生成的每个pdf页面的图形大小和数量

r - 数据框列命名

language-agnostic - 为您的项目命名 : does it matter?

php - 什么时候应该在 PHP 命名中使用 camelCase/Camel Case 或下划线?

r - R 中的模拟数据和 Probit 模型

r - 在 ubuntu 16.04 上安装 rgdal 的麻烦

r - R 包如何产生指数为 -237 的 p 值?

python - 接受具有多个参数的函数并返回具有单个元组参数的函数的函数

ios - 我在哪里可以找到官方手册中有关 iOS 图像文件命名的信息?

networking - IP地址和端口号的组合叫什么?