4

以下の関数では:

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

関数の戻り時にデータセットの 2 つのコピーをメモリに割り当てるつもりですか、それとも参照による割り当てになりますか。

このスレッドR、ディープ コピーとシャロー コピー、参照渡しは、それについていくつかのヒントを与えてくれますが、私にはそれほど明確ではありませんでした。

別の同様の例は次のとおりです。

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 に答える