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?


Muy interesante, como siempre. Gracias. Me ha sorprendido que con
a <- 1:10
tracemen( a )
a[1] <- 2
se haga llamada a duplicate y sin embargo con a[1] <- 2L no .
A partir de ahora cuando tenga que tratar con enteros y con bucles, usaré la "L".
Saludos.
No es sólo que se “duplique” el objeto. Es que se transforma internamente de entero a doble.
He buscado en la ayuda de R lo explica en ?Numeric.Constants.
An numeric constant immediately followed by L is regarded as an integer number when possible (and with a warning if it contains a “.”)
La verdad es que había visto la L pero ni me lo había planteado ¡Que interesante! Gracias.
Gracias por la explanacion. Piensaba que la ‘L’ significaba ‘levels’. He apprendido una cosa hoy.