在下面的函数中:
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)
答案 0 :(得分:2)
您可以通过查看R源中的src/main/eval.c来了解return()
的内部实施方式。它是函数do_return()
,也调用eval()
。只传递SEXP,这些are pointers。
所以答案是,没有创建返回值的额外副本。它基本上已经过优化了。