从函数返回是否会创建额外的副本?

时间:2013-02-10 03:56:57

标签: r

在下面的函数中:

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)

1 个答案:

答案 0 :(得分:2)

您可以通过查看R源中的src/main/eval.c来了解return()的内部实施方式。它是函数do_return(),也调用eval()。只传递SEXP,这些are pointers

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