R 访问所有参数,包括默认参数



我想访问用户选择的函数输入以及函数的所有默认参数。

example <- function(a = 1:10, b) {
c = a + b
output <- list()
output$call <- sys.call()
output$data <- c
return(output)
}
example_output <- example(b=10)

我正在尝试使用sys.call()来获取相关信息,然后将其作为call存储在输出中,但这仅返回用户首先输入的信息:

example_output
$call
example(b = 10)
$data
[1] 11 12 13 14 15 16 17 18 19 20

这仍然让我不确定在这种情况下a是什么,因为它是在函数定义中默认设置的。

我知道我可以使用以下方法获取默认参数

formals(example)
$a
1:10
$b

这给了我默认值,但没有用户输入。

我想将所有这些保存在输出对象(在本例中为列表(中,以便保存它以供进一步处理对象。

有什么建议吗?

非常感谢!

我真的想不出这个应用程序,但它肯定是可能的:

example <- function(a = 1:10, b) 
{
default_args <- formals(example)
mc           <- as.list(match.call())
passed_vars  <- mc[-1]
default_args <- default_args[is.na(match(names(default_args), names(passed_vars)))]
for(i in seq_along(default_args)) 
passed_vars[[names(default_args)[i]]] <- default_args[[i]]
passed_vars <- passed_vars[match(names(formals(example)), names(passed_vars))]
mc <- mc[1]
for(i in seq_along(passed_vars)) 
mc[[names(passed_vars)[i]]] <- passed_vars[[names(passed_vars)[i]]]
c = a + b
output <- list()
output$call <- as.call(mc)
output$data <- c
return(output)
}

所以我们可以做到:

example(b=5)
#> $call
#> example(a = 1:10, b = 5)
#>
#> $data
#> [1]  6  7  8  9 10 11 12 13 14 15

example(a = 1:5, b=5)
#> $call
#> example(a = 1:5, b = 5)
#>
#> $data
#> [1]  6  7  8  9 10

这已经在另一篇文章中得到了回答(我应该真的找到了..(。

这可以使用mget(names(formals()),sys.frame(sys.nframe())). 在完整示例中使用它:

example <- function(a = 1:10, b) {
c = a + b

output <- list()
output$call <- mget(names(formals()),sys.frame(sys.nframe()))
output$data <- c
return(output)
}
example(b=10)

给我:

$call
$call$a
[1]  1  2  3  4  5  6  7  8  9 10
$call$b
[1] 10

$data
[1] 11 12 13 14 15 16 17 18 19 2

现在是默认参数以及用户输入的 arugment。

感谢您@user63230的帮助!

最新更新