Asignación en R: ¿flecha o lo innombrable?

Alguien a quien no quiero nombrar (pero que sabe de sobra quién es) me comentaba el otro día algo que no sabía de la asignación en R: las presuntas diferencias entre <- e =. Que en resumen eran: ambos asignan pero = hace una copia del objeto asignado mientras que <- no. Como consecuencia, <- es más eficiente desde el punto de vista de la gestión de la memoria. ¿Será cierto? ¿Qué nos dirá tracemem al respecto? No seáis vagos y probad ...

10 de noviembre de 2015 · Carlos J. Gil Bellosta

Eles, "casts" y el rizo del rizo de la programación eficiente (con R)

Ante las preguntas de alguno de mis lectores, voy a proporcionar una explicación acerca de la misteriosa L. Bueno, voy más bien a dejar que la deduzcan ellos mismos a partir de la siguiente serie de bloques de código: a <- rep( 0, 10 ) typeof( a ) object.size( a ) b <- rep( 0L, 10 ) typeof( b ) object.size( b ) ############## a <- 1:10 typeof( a ) object.size( a ) a[1] <- 10 typeof( a ) object.size( a ) a <- 1:10 a[1] <- 10L typeof( a ) object.size( a ) ############## a <- 1:10 tracemem( a ) a[1] <- 2 a <- 1:10 tracemem( a ) a[1] <- 2L ############## system.time( replicate( 1e5, { a <- (1:100); a[1] <- 12 } ) ) system.time( replicate( 1e5, { a <- (1:100); a[1] <- 12L } ) ) Lectores míos, no seáis perezosos y haced, cuando menos, ?tracemem en vuestra consola. Una vez leída la página de ayuda, ¿se os ocurre algún truco para ahorrar mucha memoria cuando trabajáis con objetos (p.e., matrices) grandes de enteros?

16 de enero de 2012 · Carlos J. Gil Bellosta

Gestión avanzada de memoria en R: tracemem (II)

He leído estos días el capítulo 14 de The Art of R Programming que trata problemas y trucos para mejorar el rendimiento de R en términos de velocidad y memoria. Menciona la función tracemem de la que nos ocupamos el otro día. Menciona el capítulo cómo uno de los estranguladores del rendimiento de R es su política de copiar al cambiar (copy-on-change). Generalmente, cuando modificamos un objeto, R realiza una copia íntegra de él (¿y qué pasa si realizamos pequeñas modificaciones en un objeto muy grande?): ...

14 de octubre de 2011 · Carlos J. Gil Bellosta

Gestión avanzada de memoria en R: tracemem

Muchos usuarios de R se enfrentan en alguna ocasión a problemas con el uso y gestión de la memoria. La función tracemem es útil a la hora de identificar ineficiencias en el código. En su página de ayuda se lee: Esta función marca un objeto de forma que se imprime un mensaje cada vez que se llama a la función interna duplicate. Esto sucede cuando dos objetos comparten la misma memoria y uno de ellos se modifica. Esta es una causa de uso de memoria difícil de predecir en R. ...

3 de octubre de 2011 · Carlos J. Gil Bellosta