1
我在R中編寫了一個函數,如果我可以通過引用傳遞,就可以按照我的意圖工作。它涉及嵌套sapply
調用和執行內部分配。由於R不使用引用傳遞,函數不起作用。我應該用什麼來代替R中的傳遞引用?
我知道有一些可用的軟件包,例如R.oo,將參考-y方面傳遞給R,但我想知道是否有更好的方法。如果傳遞參考不可用,傳遞數據的'R'方式是什麼?
我在R中編寫了一個函數,如果我可以通過引用傳遞,就可以按照我的意圖工作。它涉及嵌套sapply
調用和執行內部分配。由於R不使用引用傳遞,函數不起作用。我應該用什麼來代替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
編輯:例如微小的變化
您可以使用通通過參考環境。如果您發佈了一個只能通過引用傳遞的函數示例,那麼有人應該可以提供幫助。 – Andrie
...另外,如果可以通過更多的R-ish方式實現函數_without_並使用傳遞引用,那麼我們仍然需要查看函數的一個示例來幫助解決這個問題。 – joran
我的猜測是最簡單的方法是用for循環替換sapply調用。 – blindjesse