r - 您可以使用 Replace() 从文本字符串在 R 中创建函数吗?

标签 r function dplyr substitution nse

我正在尝试编写一个函数,允许我为 fieldoperatorvalue 输入文本字符串,并返回一个然后我可以将简单的 dplyr::filter 函数应用于数据集。

示例:

library(dplyr)
field <- "Species"
operator <- "=="
value <- "virginica"
myfun <- substitute(
   function(x) filter(x, EXPR(FIELD, VALUE)),
   list(
     FIELD = as.symbol(field),
     EXPR = as.symbol(operator),
     VALUE = value
   )
 )
myfun
function(x) filter(x, Species == "virginica")

到目前为止,一切都很好,对吧?看起来我们都准备好了。但没那么快:

> myfun(iris)
Error in myfun(iris) (from foo.R!10Zf0E#19) : could not find function "myfun"

如果我输入class(myfun),结果表明我创建了一个名为call的东西。但我真的想要一个功能。有没有办法将调用转换为函数,或者重写上面的代码,以便我实际上得到一个工作函数?

最佳答案

嗯,这很简单。解决方案是用 eval() 包装 substitute(),如下所示:

> myfun <- eval(
      substitute(
        function(x) filter(x, EXPR(FIELD, VALUE)),
        list(
          FIELD = as.symbol(field),
          EXPR = as.symbol(operator),
          VALUE = value
        )
      )
    )

然后 myfun(iris) 按预期工作。

关于r - 您可以使用 Replace() 从文本字符串在 R 中创建函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66180697/

相关文章:

R将一长串问卷选择转换为每个问卷一行的数据框

postgresql - 永远运行大量记录的功能

android - 使用函数参数按名称检索可绘制资源

r - 计算以分号分隔的累积唯一因素 按名称分组

r - dplyr case_when 具有动态案例数

r - 使用聚合遍历 data.table

r - 将某些行保留在具有条件的数据框中

function - Scala 风格 : how far to nest functions?

使用 tidyverse 删除给定特定条件的重复条目

r - dplyr 方式对共享相同 "levels"的多个变量进行制表(汇总)