2013-02-10 73 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

所以答案是,没有额外的副本返回值正在创建。它基本上被优化了。