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?

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.