Determining memory usage of objects?

MemoryR

Memory Problem Overview


I'd like to work out how much RAM is being used by each of my objects inside my current workspace. Is there an easy way to do this?

Memory Solutions


Solution 1 - Memory

some time ago I stole this little nugget from here:

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

it has served me well

Solution 2 - Memory

1. by object size

to get memory allocation on an object-by-object basis, call object.size() and pass in the object of interest:

object.size(My_Data_Frame)

(unless the argument passed in is a variable, it must be quoted, or else wrapped in a get call.)variable name, then omit the quotes,

you can loop through your namespace and get the size of all of the objects in it, like so:

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

2. by object type

to get memory usage for your namespace, by object type, use 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 

(There's another function, memory.size() but i have heard and read that it only seems to work on Windows. It just returns a value in MB; so to get max memory used at any time in the session, use memory.size(max=T)).

Solution 3 - Memory

You could try the lsos() function from 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> 

Solution 4 - Memory

This question was posted and got legitimate answers so much ago, but I want to let you know another useful tips to get the size of an object using a library called gdata and its ll() function.

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)

Solution 5 - Memory

another (slightly prettier) option using dplyr

    data.frame('object' = ls()) %>% 
      dplyr::mutate(size_unit = object %>%sapply(. %>% get() %>% object.size %>% format(., unit = 'auto')),
                    size = as.numeric(sapply(strsplit(size_unit, split = ' '), FUN = function(x) x[1])),
                    unit = factor(sapply(strsplit(size_unit, split = ' '), FUN = function(x) x[2]), levels = c('Gb', 'Mb', 'Kb', 'bytes'))) %>% 
      dplyr::arrange(unit, dplyr::desc(size)) %>% 
      dplyr::select(-size_unit)

Solution 6 - Memory

A data.table function that separates memory and unit for easier sorting:

ls.obj <- {as.data.table(sapply(ls(), function(x){format(object.size(get(x)), nsmall=3,digits=3,unit="Mb")}),keep.rownames=TRUE)[, c("mem","unit") := tstrsplit(V2, " ", fixed=TRUE)][, setnames(.SD,"V1","obj")][,.(obj,mem=as.numeric(mem),unit)][order(-mem)]}

ls.obj

                    obj     mem unit
 1:                obj1 848.283   Mb
 2:                obj2  37.705   Mb

...

Solution 7 - Memory

Here's a tidyverse-based function to calculate the size of all objects in your environment:

weigh_environment <- function(env){
  
  purrr::map_dfr(env, ~ tibble::tibble("object" = .) %>% 
                   dplyr::mutate(size = object.size(get(.x)),
                                 size = as.numeric(size),
                                 megabytes = size / 1000000))
  
}

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJosh ReichView Question on Stackoverflow
Solution 1 - MemoryJD LongView Answer on Stackoverflow
Solution 2 - MemorydougView Answer on Stackoverflow
Solution 3 - MemoryDirk EddelbuettelView Answer on Stackoverflow
Solution 4 - MemoryBlaszardView Answer on Stackoverflow
Solution 5 - Memoryfilups21View Answer on Stackoverflow
Solution 6 - MemoryrferrisxView Answer on Stackoverflow
Solution 7 - MemoryChad PeltierView Answer on Stackoverflow