我在 R 中编写了一个函数,如果我可以通过引用传递,它将按我的意图工作。它涉及嵌套sapply
调用并在其中执行分配。由于 R 不使用按引用传递,因此这些函数不起作用。
我知道有诸如 R.oo 之类的软件包可以通过引用-y 方面为 R 带来传递,但我想了解是否有更好的方法。如果按引用传递不可用,传递数据的“R”方式是什么?
我在 R 中编写了一个函数,如果我可以通过引用传递,它将按我的意图工作。它涉及嵌套sapply
调用并在其中执行分配。由于 R 不使用按引用传递,因此这些函数不起作用。
我知道有诸如 R.oo 之类的软件包可以通过引用-y 方面为 R 带来传递,但我想了解是否有更好的方法。如果按引用传递不可用,传递数据的“R”方式是什么?
如果您不修改参数,那么它实际上不会复制它,因此做任何特殊的事情可能毫无意义:
> 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
编辑:对示例的细微更改