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?

Licencia Creative Commons
Eles, “casts” y el rizo del rizo de la programación eficiente (con R) por Carlos J. Gil Bellosta, a excepción del contenido de terceros y de que se indique lo contrario, se encuentra bajo una Licencia Creative Commons Attribution-ShareAlike 4.0 International Licencia.

4 comentarios sobre “Eles, “casts” y el rizo del rizo de la programación eficiente (con R)

  1. Jose Luis 16 enero, 2012 10:29

    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.

  2. datanalytics 16 enero, 2012 13:13

    No es sólo que se “duplique” el objeto. Es que se transforma internamente de entero a doble.

  3. jaume 16 enero, 2012 14:46

    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.

  4. ChrisL 16 enero, 2012 15:43

    Gracias por la explanacion. Piensaba que la ‘L’ significaba ‘levels’. He apprendido una cosa hoy.

Los comentarios están desabilitados.