4

在下面的函数中:

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)
4

1 回答 1

3

您可以通过查看R 源代码中的src/main/eval.creturn()来了解内部实现的方式。它是函数,它也调用. 只有 SEXP 被传递,这些是指针do_return()eval()

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

于 2013-02-10T08:49:50.327 回答