r - 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
推荐阅读
- neo4j - 一系列条件 foreachs 不执行 neo4j 密码
- rhino - 在 Rhino 中获取异常的堆栈跟踪
- angular - 没有验证的角反应形式
- c - 如何使用 O(n) 算法在 C 中就地分区数组?
- ios - iOS 设备中的 MP3 副本
- reactjs - React 分析包大小
- java - 如何使用 Spring Boot 发送异步电子邮件
- python - 我如何根据外键过滤多对多字段?(我是 django 管理面板本身)
- reactjs - 尝试通过我的反应应用程序从 Firestore 读取和显示数据时出现错误“无法读取未定义的属性 'map'”
- session - 如何通过 Mockito 模拟超类中的方法?