match.call用于函数,订单也匹配

时间:2014-10-14 19:05:10

标签: r

我有一个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

在我的研究中,callmatch.callformals中没有任何内容允许我在这种情况下查找调用的特定输入顺序。有任何想法吗?非常感谢你的帮助。

1 个答案:

答案 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