Rev 5055 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
\name{Memory}\title{Memory Available for Data Storage}\usage{R --vsize v --nsize n}\arguments{\item{v}{Use \code{v} bytes of heap memory}\item{n}{Use \code{n} cons cells.}}\description{Use command line options to set the memory available for \R.}\details{\R (currently) uses a static memory model. This means that when itstarts up, it asks the operating system to reserve a fixed amount ofmemory for it. The size of this chunk cannot be changedsubsequently. Hence, it can happen that not enough memory wasallocated, e.g., when trying to read large data sets into \R.In these cases, you should restart \R (after saving your currentworkspace) with more memory available, using the command lineoptions \code{--nsize} and \code{--vsize}. To understand theseoptions, one needs to know that \R maintains separate areas for fixedand variable sized objects. The first of these is allocated as anarray of ``\bold{cons cells}'' (Lisp programmers will know what they are,others may think of them as the building blocks of the languageitself, parse trees, etc.), and the second are thrown on a``\bold{heap}'' of ``Vcells'' (see\code{\link{gc}()["Vcells","total"]}) of 8 bytes each. Effectively,the input \code{v} is therefore truncated to the nearest multiple of 8.The \code{--nsize} option can be used to specify thenumber of cons cells (each occupying 16 bytes) which \R is to use(the default is 250000), and the \code{--vsize} option to specifythe size of the vector heap in bytes (the default is 6 MB).Both options must be integers or integers ending with\code{M}, \code{K}, or \code{k} meaning \emph{Mega}(= \eqn{2^{20}} = 1048576), (computer) \emph{Kilo} (= \eqn{2^{10}} = 1024),or regular \emph{kilo} (= 1000). (The minimum allowed values are200000 and 2M.)\crE.g., to read in a table of 10000 observations on 40 numericvariables, \code{R --vsize 10M} should do; For\code{\link{source}()}ing a large file, you'd use \code{R --nsize 500k}.Note that the information on where to find vectors and strings onthe heap is stored using cons cells. Thus, it may also be necessaryto allocate more space for cons cells in order to performcomputations with very ``large'' variable-size objects.You can find out the current memory consumption (the proportion ofheap and cons cells used) by typing \code{\link{gc}()} at the \Rprompt. This may help you in finding out whether to increase\code{--vsize} or \code{--nsize}. Note that following\code{\link{gcinfo}(TRUE)}, automatic garbage collection alwaysprints memory use statistics.\cr\R will tell you whether you ran out of cons or heap memory.The defaults for \code{--nsize} and \code{--vsize} can be changed bysetting the environment variables \code{R_NSIZE} and \code{R_VSIZE}respectively, perhaps most conveniently on Unix in the file\file{~/.Renviron}.When using \code{\link{read.table}}, the memory requirements are infact higher than anticipated, because the file is first read in asone long string which is then split again. Use \code{\link{scan}} ifpossible in case you run out of memory when reading in a large table.}\seealso{\code{\link{gc}} for information on the garbage collector.}\examples{# Start R with 15MB of heap memory and 1 million cons cells\dontrun{R --vsize 15M --nsize 1000k}}