代码之家  ›  专栏  ›  技术社区  ›  stschn

省略号上的depase和substitution获取参数名称

  •  2
  • stschn  · 技术社区  · 4 年前

    如何获得函数调用中用于省略号的参数的名称,无论它们是否打包到列表中?

    如果将参数直接传递到函数中,那么下面的函数可以很好地工作。

    foo <- function(...) {
      sapply(substitute(...()), deparse)
    }
    
    a <- 1:3
    b <- 2:6
    foo(a, b)
    
    result: "a" "b"
    

    现在,我将参数明确地打包到一个列表中,以使我的代码对管道更友好:

    foo(list(a, b))
    
    result: "list(a, b)"
    

    函数foo也应该使用它,只返回名称a和b。如何在函数foo中处理这一问题?

    非常感谢。

    0 回复  |  直到 4 年前
        1
  •  3
  •   Mohamed Desouky    4 年前

    作为一种变通方法,请尝试以下操作

    foo <- function(...) {
        x <- substitute(...())
        if(class(x[[1]]) == "call")  sapply(x[[1]][-1] , deparse)
        else sapply(x , deparse)
    }
    
    
    • 输出
    > foo(list(a, b))
    [1] "a" "b"
    
    > foo(a, b)
    [1] "a" "b"
    
    
    推荐文章