2012-06-06 51 views
1

我在R中编写了一个函数,如果我可以通过引用传递,就可以按照我的意图工作。它涉及嵌套sapply调用和执行内部分配。由于R不使用引用传递,函数不起作用。我应该用什么来代替R中的传递引用?

我知道有一些可用的软件包,例如R.oo,将参考-y方面传递给R,但我想知道是否有更好的方法。如果传递参考不可用,传递数据的'R'方式是什么?

+2

您可以使用通通过参考环境。如果您发布了一个只能通过引用传递的函数示例,那么有人应该可以提供帮助。 – Andrie

+2

...另外,如果可以通过更多的R-ish方式实现函数_without_并使用传递引用,那么我们仍然需要查看函数的一个示例来帮助解决这个问题。 – joran

+0

我的猜测是最简单的方法是用for循环替换sapply调用。 – blindjesse

回答

1

如果不修改参数,那么它实际上并不会复制它,所以它可能是毫无意义的做什么特别的:

> gc() # using 6.2 MB of Vcells 
     used (Mb) gc trigger (Mb) max used (Mb) 
Ncells 560642 15.0  984024 26.3 984024 26.3 
Vcells 809878 6.2 2670432 20.4 2310055 17.7 
> x <- as.numeric(1:1000000) 
> gc() # now we are using 13.9 MB 
      used (Mb) gc trigger (Mb) max used (Mb) 
Ncells 560640 15.0  984024 26.3 984024 26.3 
Vcells 1809867 13.9 2883953 22.1 2310055 17.7 
> f0 <- function(x) { s <- sum(x); print(gc()); s } 
> f0(x) # f0 did not use appreciably more despite using a huge vector 
      used (Mb) gc trigger (Mb) max used (Mb) 
Ncells 560655 15.0  984024 26.3 984024 26.3 
Vcells 1809872 13.9 2883953 22.1 2310055 17.7 
[1] 500000500000 

编辑:例如微小的变化

相关问题