[编辑:提示此解决方法的问题已从R 3.1.0开始修复.]
我被问到其他地方发布这是一个自我回答的问题.
当R函数通过省略号参数接受任意数量的参数时,访问它们的常用方法是使用list(...):
f <- function(...) {
dots <- list(...)
# Let's print them out.
for (i in seq_along(dots)) {
cat(i, ": name=", names(dots)[i], "\n", sep="")
print(dots[[i]])
}
}
> f(10, a=20)
1: name=
[1] 10
2: name=a
[1] 20
Run Code Online (Sandbox Code Playgroud)
但是,R(截至v3.0.2)深层复制了所有list元素:
> x <- 10
> .Internal(inspect(x))
@10d85ca68 14 REALSXP g0c1 [MARK,NAM(2),TR] (len=1, tl=0) 10
> x2 <- x
> .Internal(inspect(x2)) # Not copied.
@10d85ca68 14 REALSXP g0c1 [MARK,NAM(2),TR] (len=1, tl=0) 10
> y <- …Run Code Online (Sandbox Code Playgroud)