【问题标题】:match.call for function with order matched toomatch.call 函数的顺序也匹配
【发布时间】:2014-10-14 19:05:09
【问题描述】:

我有一个 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 中没有任何内容允许我在这种情况下查找调用的特定输入顺序。有任何想法吗?非常感谢您的帮助。

【问题讨论】:

    标签: r


    【解决方案1】:

    您可以改用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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 2018-12-08
      • 2019-06-21
      • 2014-11-17
      • 1970-01-01
      相关资源
      最近更新 更多