2009-09-08 6 views

Répondre

134

il y a quelque temps que j'ai gagné cette petite pépite de here:

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

il m'a bien servi

+12

aussi, si l'on veut la mémoire totale utilisée par une session R, on peut faire 'object.size (x = lapply (ls(), get))' et 'imprimer (object.size (x = lapply (ls(), get)), units = "Mb") ' – tflutre

+1

Cette jolie petite bête m'a trompé, puisque j'avais quelque chose de grand appelé 'x' (indice: il semblait petit); voici un remplacement: 'sort (spply (mget (ls()), object.size))'. – petrelharp

+0

@tflutre Ma compréhension est que ce genre de chose peut être trompeur car R est une copie à l'écriture. Si je prends some_list <- some_other_list, la taille de some_list est rapportée comme la même taille que some_other_list, mais si je ne lis que depuis some_list alors la mémoire est partagée. Quelqu'un peut-il confirmer si c'est correct? – savagent

21

Vous pouvez essayer la fonction 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. par taille d'objet

pour obtenir l'allocation de mémoire sur une base objet par objet , appeler object.size() et passe dans l'objet d'intérêt:

object.size(My_Data_Frame) 

(sauf si l'argument transmis est un variable, il doit être cité, ou enveloppé d'autre dans un obtenir appel.) nom de la variable, puis omettez les guillemets,

vous pouvez parcourir votre espace de noms et obtenir la taille de tous les objets qu'elle contient, comme si :

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

2. par type d'objet

pour obtenir l'utilisation de la mémoire pour votre espace de noms, par type d'objet, utilisez 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 

(Il y a une autre fonction , memory.size() mais j'ai entendu et lu que cela ne semble fonctionner que sur Windows. Il retourne juste une valeur en Mo; pour utiliser la mémoire maximale à tout moment de la session, utilisez memory.size (max = T)).

7

Cette question a été postée et a obtenu des réponses légitimes il y a tellement de temps, mais je veux vous faire connaître d'autres conseils utiles pour obtenir la taille d'un objet en utilisant une bibliothèque appelée gdata et sa fonction 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) 
Questions connexes