取消引用 rlang::new_function 中的参数(对于函数工厂)
Unquote arguments in rlang::new_function (for function factory)
我想为通过 rlang::new_function
创建的函数指定自定义参数。为此,我需要将参数传递给 new_function
的 args
参数。
我假设 named_arg
应该被引用/不被引用。这是我到目前为止尝试过的:
library(rlang)
function_factory <- function(named_arg) {
new_function(
exprs(named_arg =,... = ),
expr(print("hello world")),
caller_env()
)
}
fun1 <- function_factory(arg1)
fun1
#> function (named_arg, ...)
#> print("hello world")
所需的输出将是:
#> function (arg1, ...)
#> print("hello world")
以下是我尝试过但没有奏效的一种方法:
function_factory <- function(named_arg) {
named_arg_quo <- enquo(named_arg)
new_function(
exprs(!!named_arg_quo =,... = ),
expr(print("hello world")),
caller_env()
)
}
#> Error: <text>:21:27: unexpected '='
#> 20: new_function(
#> 21: exprs(!!named_arg_quo =
#> ^
我们可以使用 substitute
获取未引用的参数并更改 'exprs`
的 names
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")
如果我们使用 rlang
,则使用 quo_name
转换为字符串
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")
我想为通过 rlang::new_function
创建的函数指定自定义参数。为此,我需要将参数传递给 new_function
的 args
参数。
我假设 named_arg
应该被引用/不被引用。这是我到目前为止尝试过的:
library(rlang)
function_factory <- function(named_arg) {
new_function(
exprs(named_arg =,... = ),
expr(print("hello world")),
caller_env()
)
}
fun1 <- function_factory(arg1)
fun1
#> function (named_arg, ...)
#> print("hello world")
所需的输出将是:
#> function (arg1, ...)
#> print("hello world")
以下是我尝试过但没有奏效的一种方法:
function_factory <- function(named_arg) {
named_arg_quo <- enquo(named_arg)
new_function(
exprs(!!named_arg_quo =,... = ),
expr(print("hello world")),
caller_env()
)
}
#> Error: <text>:21:27: unexpected '='
#> 20: new_function(
#> 21: exprs(!!named_arg_quo =
#> ^
我们可以使用 substitute
获取未引用的参数并更改 'exprs`
names
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")
如果我们使用 rlang
,则使用 quo_name
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")