2009-09-08 7 views

Respuesta

134

Hace algún tiempo me robó esta pequeña pepita de here:

sort(sapply(ls(),function(x){object.size(get(x))})) 

que me ha servido bien

+12

también, si se desea que la memoria total utilizada por una sesión de R, se puede hacer 'object.size (x = lapply (ls(), get))' y 'impresión (object.size (x = lapply (ls(), get)), units = "Mb") ' – tflutre

+1

Ese pequeño y agradable nugged me confundió, ya que tenía algo grande llamado 'x' (pista: parecía pequeño); aquí hay un reemplazo: 'sort (sapply (mget (ls()), object.size))'. – petrelharp

+0

@tflutre Según tengo entendido, este tipo de cosas pueden ser engañosas ya que R es una copia en escritura. Si tomo some_list <- some_other_list, el tamaño de some_list se informa como el mismo tamaño que some_other_list, pero si solo leo desde some_list, la memoria se comparte. ¿Alguien puede confirmar si esto es correcto? – savagent

21

Usted podría intentar la función lsos() de this question:

R> a <- rnorm(100) 
R> b <- LETTERS 
R> lsos() 
     Type Size Rows Columns 
b character 1496 26  NA 
a numeric 840 100  NA 
R> 
33

1. por tamaño del objeto

para obtener la asignación de memoria en una objeto por objeto base, llame object.size() y pase el objeto de interés:

object.size(My_Data_Frame) 

(a menos que el argumento pasado en es una variable, debe ser citado, o bien envuelto en una llegar llamada.) nombre de la variable, entonces omitir las comillas,

puede recorrer el espacio de nombres y obtener el tamaño de todos los objetos en ella, al igual que :

for (itm in ls()) { 
    print(formatC(c(itm, object.size(get(itm))), 
     format="d", 
     big.mark=",", 
     width=30), 
     quote=F) 
} 

2. por tipo de objeto

para conseguir uso de memoria para el espacio de nombres, según el tipo de objeto, utilice memory.profile()

memory.profile() 

    NULL  symbol pairlist  closure environment  promise language 
     1  9434  183964  4125  1359  6963  49425 
special  builtin  char  logical  integer  double  complex 
    173  1562  20652  7383  13212  4137   1 

(Hay otra función , memory.size() pero he escuchado y leído que parece que solo funciona en Windows. Simplemente devuelve un valor en MB; así que para obtener la máxima memoria utilizada en cualquier momento de la sesión, use memory.size (max = T)).

7

Esta pregunta se publicó y obtuvo respuestas legítimas hace tanto tiempo, pero quiero hacerle saber otros consejos útiles para obtener el tamaño de un objeto utilizando una biblioteca llamada gdata y su función ll().

library(gdata) 
ll() # return a dataframe that consists of a variable name as rownames, and class and size (in KB) as columns 
subset(ll(), KB > 1000) # list of object that have over 1000 KB 
ll()[order(ll()$KB),] # sort by the size (ascending) 
Cuestiones relacionadas