小编cod*_*ola的帖子

R:函数如何使用省略号(...)接受变量参数而不将其复制到内存中?

[编辑:提示此解决方法的问题已从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)

memory arguments r ellipsis copying

14
推荐指数
1
解决办法
7470
查看次数

标签 统计

arguments ×1

copying ×1

ellipsis ×1

memory ×1

r ×1