Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Release memory in R

I use some variables, but when it is used, I never need it again, so I need to remove it and release the memory, but the function rm() seems not help:

memory.size() 30.69 tmp=matrix(rnorm(6e5*20),6e5,20) memory.size() 207.64 rm(tmp) memory.size() 207.64 

Does it mean that I remove the tmp but the memory is not released?

like image 531
PepsiCo Avatar asked Mar 22 '13 01:03

PepsiCo


People also ask

How do I free up memory on R?

rm() function in R Language is used to delete objects from the workspace. It can be used with ls() function to delete all objects. remove() function is also similar to rm() function.

Does gc () Clear memory?

GC automatically releases memory when an object is no longer used. It does this by tracking how many names point to each object, and when there are no names pointing to an object, it deletes that object. Despite what you might have read elsewhere, there's never any need to call gc() yourself.

How do I reduce memory usage in RStudio?

Go to Tools -> Memory and uncheck Show Current Memory Usage.

How do I check my memory in R?

You can find out the current memory consumption (the heap and cons cells used as numbers and megabytes) by typing gc() at the R prompt.


1 Answers

I use gc() to free up RAM between operations. Below is example of how I use it in a loop, but see here for a more detailed discussion of gc() and here for more on memory management during an R session.

# load library library(topicmodels)  # get data data("AssociatedPress"))  # set number of topics to start with k <- 20  # set model options control_LDA_VEM <- list(estimate.alpha = TRUE, alpha = 50/k, estimate.beta = TRUE, verbose = 0, prefix = tempfile(), save = 0, keep = 0, seed = as.integer(100), nstart = 1, best = TRUE, var = list(iter.max = 10, tol = 10^-6), em = list(iter.max = 10, tol = 10^-4), initialize = "random")   # create the sequence that stores the number of topics to  # iterate over sequ <- seq(20, 300, by = 20)  # basic loop to iterate over different topic numbers with gc # after each run to empty out RAM lda <- vector(mode='list', length = length(sequ)) for(k in sequ) {   lda[[k]] <- LDA(AssociatedPress[1:20,], k, method= "VEM", control = control_LDA_VEM)   gc() # here's where I put the garbage collection to free up memory before the next round of the loop }  # convert list output to dataframe (suggestions for a simpler method are welcome!) best.model.logLik <- data.frame(logLik = as.matrix(lapply(lda[sequ], logLik)), ntopic = sequ)  # plot with(best.model.logLik, plot(ntopic, logLik, type = 'l', xlab="Number of topics", ylab="Log likelihood")) 

enter image description here

# print ordered dataframe to see which number of topics has the highest log likelihood (best.model.logLik.sort <- best.model.logLik[order(-as.numeric(best.model.logLik$logLik)), ])      logLik       ntopic 2  -17904.12     40 3  -18105.48     60 1  -18181.84     20 4   -18569.7     80 5  -19736.94    100 6   -21919.6    120 7  -23785.08    140 8  -24914.23    160 9  -25493.76    180 10 -25837.64    200 11 -25964.23    220 12 -26061.01    240 13 -26117.92    260 14 -26149.44    280 15 -26168.91    300 
like image 169
Ben Avatar answered Sep 24 '22 21:09

Ben