2013-02-10 71 views
3

在下面的功能:從函數返回是否創建額外的副本?

DownloadRawData <- function(fileurl, filename) 
{ 
    download.file(fileurl, destfile=filename) 
    dataset = read.csv(filename) 
    return(dataset) 
} 
myDataSet <- downloadRawData(myurl, myname) 

難道我們要在函數返回分配數據集的2份在內存中,或轉讓將通過參考。

此線程R, deep vs. shallow copies, pass by reference給出了一些提示,但它不是很清楚。

另一個類似的例子是:

f <- function(n) 
{ 
    v <- c(1:n) 
    v <- sample(v,n) 
    return(v) 
} 
myV <- f(10000) 

回答

2

你可以看到如何return()在內部被在R源考慮看看src/main/eval.c實現。它是功能do_return(),它也叫eval()。只有SEXP被傳遞,而這些are pointers

所以答案是,沒有額外的副本返回值正在創建。它基本上被優化了。