在R中动态创建和评估函数

在R中动态创建和评估函数,r,tidyverse,metaprogramming,non-standard-evaluation,R,Tidyverse,Metaprogramming,Non Standard Evaluation,我正在尝试从字符串输入动态创建和计算函数,并且再次挂断了元编程/计算()。我有一种感觉,这是答案,所以,但我搜索,并没有能够找出解决方案,通过查看其他帖子;但是,如果有现有答案,请让我知道并标记为重复。非常感谢您的时间和帮助!下面是对这个问题的一个讨论 库(dplyr) 图书馆(purrr) 图书馆(rlang) 图书馆(palmerpenguins) #创建要与企鹅连接的数据 penguin_colors一个选项是使用get()检索适当的函数: join <- function(JOIN

我正在尝试从字符串输入动态创建和计算函数,并且再次挂断了元编程/计算()。我有一种感觉,这是答案,所以,但我搜索,并没有能够找出解决方案,通过查看其他帖子;但是,如果有现有答案,请让我知道并标记为重复。非常感谢您的时间和帮助!下面是对这个问题的一个讨论

库(dplyr)
图书馆(purrr)
图书馆(rlang)
图书馆(palmerpenguins)
#创建要与企鹅连接的数据

penguin_colors一个选项是使用
get()
检索适当的函数:

join <- function(JOINTYPE) {
    get( paste0(JOINTYPE, "_join") )
}

join("inner")(penguins, penguin_colors, by="species")

做一个理智和安全的方法:在一般情况下只使用
foo非标准评估和动态函数编程变得相当麻烦,我肯定会投票支持罗兰的“做一个理智和安全的方法”,因为它在工业环境中不应有一席之地。但是,一个选项是只将函数名创建为字符串,并使用
parse(text=[function text])
get([function text],mode='function')
提取稍后调用的函数。感谢您的评论!
开关
肯定更简单;但是,我的情况比reprex稍微复杂一些,所以
get
rlang::exec
工作吧。谢谢你<代码>rlang::exec
正是我所寻找的,并与
地图(c(“内”、“左”、“右”)、~join2(,,企鹅,企鹅颜色,by=“物种”))一起工作。
join2 <- function(JOINTYPE, ...) {
    rlang::exec( paste0(JOINTYPE, "_join"), ... )
}

join2("inner", penguins, penguin_colors, by="species")