我正在尝试编写一个函数,允许我为 field
、operator
和 value
输入文本字符串,并返回一个然后我可以将简单的 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/