我有一个R函数,通过...
接受命名参数和其他参数。例如:
f <- function(a, b, ...) {
mc <- as.list(match.call(expand.dots = TRUE)[-1])
### Lots of procesing on mc
return(mc)
}
因此,用户可能会输入调用f(a = 3, c = 3, b = 3)
,该调用将返回此列表:
$a
[1] 3
$b
[1] 3
$c
[1] 3
但是,输出的顺序与函数输入参数的顺序不匹配。很清楚为什么就是这样,因为...
位于函数参数的末尾。但我想知道是否有办法保留原始排序,即使使用了命名和...
参数。所以输出列表看起来像:
$a
[1] 3
$c
[1] 3
$b
[1] 3
在我的研究中,call
,match.call
或formals
中没有任何内容允许我在这种情况下查找调用的特定输入顺序。有任何想法吗?非常感谢你的帮助。
答案 0 :(得分:4)
您可以改为使用sys.call()
。
f <- function(a, b, ...) {
mc <- as.list(sys.call()[-1])
return(mc)
}
f(a = 3, c = 3, b = 3)
# $a
# [1] 3
#
# $c
# [1] 3
#
# $b
# [1] 3