Me gustaría comprender la lógica que R utiliza al pasar argumentos a funciones, crear copias de variables, etc. con respecto al uso de la memoria. ¿Cuándo realmente crea una copia de la variable frente a solo pasar una referencia a esa variable? En particular, las situaciones Tengo curiosidad son:R, copias profundas y superficiales, pase por referencia
f <- function(x) {x+1}
a <- 1
f(a)
Es a
ser pasado literalmente, o es una referencia a una que se pasa?
x <- 1
y <- x
Referencia de copy? ¿Cuándo no es este el caso?
Si alguien pudiera explicarme esto, lo agradecería mucho.
Usted puede encontrar [esto] (http://cran.at.r-project.org/doc/manuals/R -lang.html # Evaluación) sección de la definición de lenguaje R útil. – joran
Este documento de Morandat y sus colegas tiene una discusión interesante y crítica de la evaluación perezosa de argumentos en R: http://www.cs.purdue.edu/homes/jv/pubs/ecoop12.pdf – jthetzel
Usando 'tracemem' en un apropiado compilado R puede ser útil para la exploración, como puede '.Internal (inspeccionar (x))' con una comprensión del campo 'NAM'ED; mi mantra general es 'copia-en-cambio' así que por ejemplo tu 'y <- x' no dispara una copia (todavía) porque no ha habido ningún cambio en el original, la memoria apuntada por' x' (y ' y') es 'NAME ', de modo que la modificación de cualquiera activará una copia. –