在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")