我试图在函数中获取全局环境中的参数名称。我知道我可以使用替换来获取命名参数的名称,但我希望能够用...参数做同样的事情。我有点让它为...的第一个元素工作,但无法弄清楚如何为其余的元素做这件事。任何想法如何使其按预期工作。
foo <- function(a,...)
{
print(substitute(a))
print(eval(enquote(substitute(...))))
print(sapply(list(...),function(x) eval(enquote(substitute(x)),env=.GlobalEnv)))
}
x <- 1
y <- 2
z <- 3
foo(x,y,z)
x
y
[[1]]
X[[1L]]
[[2]]
X[[2L]]
答案 0 :(得分:60)
这里的规范习语是deparse(substitute(foo))
,但...
需要稍微不同的处理。这是一个做你想做的修改:
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"
答案 1 :(得分:22)
我会选择
foo <- function(a, ...) {
print( n <- sapply(as.list(substitute(list(...)))[-1L], deparse) )
n
}
然后
foo(x,y,z)
# [1] "y" "z"
以前在StackOverflow上有相关问题: How to use R's ellipsis feature when writing your own function?值得一读。
第二个解决方案,使用match.call
foo <- function(a, ...) {
sapply(match.call(expand.dots=TRUE)[-1], deparse)
}