Ich möchte die Logik verstehen, die R verwendet, wenn Argumente an Funktionen übergeben werden, Kopien von Variablen usw. in Bezug auf die Speichernutzung erstellen. Wann wird tatsächlich eine Kopie der Variablen erstellt oder nur ein Verweis auf diese Variable übergeben? Insbesondere über die Situationen, die ich neugierig bin, sind:R, tiefe vs. flache Kopien, Pass durch Referenz
f <- function(x) {x+1}
a <- 1
f(a)
Ist a
bestanden wörtlich werden oder ist ein Verweis auf ein übergeben wird?
x <- 1
y <- x
Referenz der Kopie? Wann ist das nicht der Fall?
Wenn mir jemand dies erklären könnte, würde ich es sehr zu schätzen wissen.
Vielleicht finden Sie [diese] (http://cran.at.r-project.org/doc/manuals/R -lang.html # Evaluation) Abschnitt der R Sprachdefinition hilfreich. – joran
Dieses Papier von Morandat und Kollegen hat eine interessante und kritische Diskussion der faulen Bewertung von Argumenten in R: http://www.cs.purdue.edu/homes/jv/pubs/ecoop12.pdf – jthetzel
Verwenden Sie 'tracemem' auf einem entsprechend kompiliertes R kann zur Erkundung hilfreich sein, ebenso wie '.Internal (inspect (x))' mit einem Verständnis des 'NAM'ED-Feldes; Mein allgemeines Mantra lautet "copy-on-change", so dass zum Beispiel Ihr 'y <- x '(noch) keine Kopie auslöst, weil das Original, der Speicher, auf den' x' (und ' y ') ist' NAMED ', so dass die Modifikation von beiden eine Kopie auslöst. –