using substitute to get argument name with

前端 未结 2 1426
花落未央
花落未央 2020-11-29 22:49

I\'m trying to get the names of arguments in the global environment within a function. I know I can use substitute to get the name of named arguments, but I would like to b

相关标签:
2条回答
  • 2020-11-29 22:56

    I would go with

    foo <- function(a, ...) {
    print( n <- sapply(as.list(substitute(list(...)))[-1L], deparse) )
        n
    }
    

    Then

    foo(x,y,z)
    # [1] "y" "z"
    

    Related question was previously on StackOverflow: How to use R's ellipsis feature when writing your own function? Worth reading.


    Second solution, using match.call

    foo <- function(a, ...) {
        sapply(match.call(expand.dots=TRUE)[-1], deparse)
    }
    
    0 讨论(0)
  • 2020-11-29 23:11

    The canonical idiom here is deparse(substitute(foo)), but the ... needs slightly different processing. Here is a modification that does what you want:

    foo <- function(a, ...) {
        arg <- deparse(substitute(a))
        dots <- substitute(list(...))[-1]
        c(arg, sapply(dots, deparse))
    }
    
    x <- 1
    y <- 2
    z <- 3
    
    > foo(x,y,z)
    [1] "x" "y" "z"
    
    0 讨论(0)
提交回复
热议问题