在rlang::new_函数中取消引用参数(用于函数工厂)
我想为通过在rlang::new_函数中取消引用参数(用于函数工厂),r,rlang,R,Rlang,我想为通过rlang::new_function创建的函数指定一个自定义参数。为此,我需要将一个参数传递给new_函数的args-参数 我假设名为_arg的应该被引用/取消引用。这就是我迄今为止所尝试的: 库(rlang) 工厂打印功能(“hello world”) 所需的输出将是: 函数(arg1,…) #>打印(“你好世界”) 以下是我尝试过的一种方法,但没有奏效: 功能工厂20:新功能( #>21:表达式(!!命名参数)= #>
rlang::new_function
创建的函数指定一个自定义参数。为此,我需要将一个参数传递给new_函数的args
-参数
我假设名为_arg的应该被引用/取消引用。这就是我迄今为止所尝试的:
库(rlang)
工厂打印功能(“hello world”)
所需的输出将是:
函数(arg1,…)
#>打印(“你好世界”)
以下是我尝试过的一种方法,但没有奏效:
功能工厂20:新功能(
#>21:表达式(!!命名参数)=
#> ^
我们可以使用substitute
获取不带引号的参数,并更改“exprs”的名称`
function_factory <- function(named_arg) {
nm1 <- deparse(substitute(named_arg))
exp1 <- exprs(named_arg =,... = )
names(exp1)[1] <- nm1
new_function(
exp1,
expr(print("hello world")),
caller_env()
)
}
function_factory(arg1)
#function (arg1, ...)
#print("hello world")
我喜欢这个解决方案,因为它是有效的;-)不过,我宁愿避免事后修改表达式列表的名称。我尝试了exprs(!!named_arg:=,…,.unquote_names=FALSE)
,但它不起作用。那么,如何在exprs中取消引用呢?
library(rlang)
function_factory <- function(named_arg) {
nm1 <- quo_name(enquo(named_arg))
exp1 <- exprs(named_arg =,... = )
names(exp1)[1] <- nm1
new_function(
exp1,
expr(print("hello world")),
caller_env()
)
}
function_factory(arg1)
#function (arg1, ...)
#print("hello world")