rlang::fn_fmls() 可以嵌套吗?
Can rlang::fn_fmls() be nested?
文档显示这是可能的:
fn <- function(a = 1, b = 2) rlang::fn_fmls()
fn()
$a
[1] 1
$b
[1] 2
我想在一个函数中使用 rlang::fn_fmls()
,并且 return 在当前范围内使用相同的参数结构。
预期行为:
x <- function(a, b){
rlang::fn_fmls(fn = rlang::current_fn())
}
x(a = 1, b = 2)
$a
[1] 1
$b
[1] 2
实际行为:
x <- function(a, b){
rlang::fn_fmls(fn = rlang::current_fn())
}
x(a = 1, b = 2)
$a
$b
我尝试过的另一种方法是:
x <- function(a, b){
tmp <- base::match.call() %>%
base::as.list()
tmp %>%
stringr::str_detect('x') %>%
purrr::discard(tmp, .)
}
x(a = 1, b = 2)
$a
[1] 1
$b
[1] 2
rlang 有没有办法得到我想要的结果?
您在寻找 rlang::call_args
吗?
x <- function(a, b) rlang::call_args(sys.call())
x(a = 1, b = 2)
#> $a
#> [1] 1
#>
#> $b
#> [1] 2
如果您正在寻找要“填写”的默认参数,那么您可以这样做:
x <- function(a = 1, b = 2)
{
f <- rlang::fn_fmls()
mc <- as.list(match.call())[-1]
append(mc, f[!names(f) %in% names(mc)])[names(f)]
}
产生以下行为:
x()
#> $a
#> [1] 1
#>
#> $b
#> [1] 2
x(a = 5)
#> $a
#> [1] 5
#>
#> $b
#> [1] 2
x(b = 7)
#> $a
#> [1] 1
#>
#> $b
#> [1] 7
x(a = 5, b = 7)
#> $a
#> [1] 5
#>
#> $b
#> [1] 7
由 reprex package (v0.3.0)
于 2020-10-03 创建
文档显示这是可能的:
fn <- function(a = 1, b = 2) rlang::fn_fmls()
fn()
$a
[1] 1
$b
[1] 2
我想在一个函数中使用 rlang::fn_fmls()
,并且 return 在当前范围内使用相同的参数结构。
预期行为:
x <- function(a, b){
rlang::fn_fmls(fn = rlang::current_fn())
}
x(a = 1, b = 2)
$a
[1] 1
$b
[1] 2
实际行为:
x <- function(a, b){
rlang::fn_fmls(fn = rlang::current_fn())
}
x(a = 1, b = 2)
$a
$b
我尝试过的另一种方法是:
x <- function(a, b){
tmp <- base::match.call() %>%
base::as.list()
tmp %>%
stringr::str_detect('x') %>%
purrr::discard(tmp, .)
}
x(a = 1, b = 2)
$a
[1] 1
$b
[1] 2
rlang 有没有办法得到我想要的结果?
您在寻找 rlang::call_args
吗?
x <- function(a, b) rlang::call_args(sys.call())
x(a = 1, b = 2)
#> $a
#> [1] 1
#>
#> $b
#> [1] 2
如果您正在寻找要“填写”的默认参数,那么您可以这样做:
x <- function(a = 1, b = 2)
{
f <- rlang::fn_fmls()
mc <- as.list(match.call())[-1]
append(mc, f[!names(f) %in% names(mc)])[names(f)]
}
产生以下行为:
x()
#> $a
#> [1] 1
#>
#> $b
#> [1] 2
x(a = 5)
#> $a
#> [1] 5
#>
#> $b
#> [1] 2
x(b = 7)
#> $a
#> [1] 1
#>
#> $b
#> [1] 7
x(a = 5, b = 7)
#> $a
#> [1] 5
#>
#> $b
#> [1] 7
由 reprex package (v0.3.0)
于 2020-10-03 创建