Rev 68948 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
% File src/library/base/man/save.Rd% Part of the R package, https://www.R-project.org% Copyright 1995-2015 R Core Team% Distributed under GPL 2 or later\name{save}\alias{save}\alias{save.image}\title{Save R Objects}\description{\code{save} writes an external representation of \R objects to thespecified file. The objects can be read back from the file at a laterdate by using the function \code{\link{load}} or \code{\link{attach}}(or \code{\link{data}} in some cases).\code{save.image()} is just a short-cut for \sQuote{save my currentworkspace}, i.e., \code{save(list = ls(all.names = TRUE), file =".RData", envir = .GlobalEnv)}.It is also what happens with \code{\link{q}("yes")}.}\usage{save(\dots, list = character(),file = stop("'file' must be specified"),ascii = FALSE, version = NULL, envir = parent.frame(),compress = isTRUE(!ascii), compression_level,eval.promises = TRUE, precheck = TRUE)save.image(file = ".RData", version = NULL, ascii = FALSE,compress = !ascii, safe = TRUE)}\arguments{\item{\dots}{the names of the objects to be saved (as symbols orcharacter strings).}\item{list}{A character vector containing the names of objects to besaved.}\item{file}{a (writable binary-mode) \link{connection} or the name of thefile where the data will be saved (when \link{tilde expansion}is done). Must be a file name for \code{save.image} or\code{version = 1}.}\item{ascii}{if \code{TRUE}, an ASCII representation of the data iswritten. The default value of \code{ascii} is \code{FALSE} whichleads to a binary file being written. If \code{NA} and\code{version >= 2}, a different ASCII representation is used whichwrites double/complex numbers as binary fractions.}\item{version}{the workspace format version to use. \code{NULL}specifies the current default format. The version used from \R0.99.0 to \R 1.3.1 was version 1. The default format as from \R1.4.0 is version 2.}\item{envir}{environment to search for objects to be saved.}\item{compress}{logical or character string specifying whether savingto a named file is to use compression. \code{TRUE} corresponds to\command{gzip} compression, and character strings \code{"gzip"},\code{"bzip2"} or \code{"xz"} specify the type ofcompression. Ignored when \code{file} is a connection andfor workspace format version 1.}\item{compression_level}{integer: the level of compression to beused. Defaults to \code{6} for \command{gzip} compression and to\code{9} for \command{bzip2} or \command{xz} compression.}\item{eval.promises}{logical: should objects which are promises beforced before saving?}\item{precheck}{logical: should the existence of the objects bechecked before starting to save (and in particular before openingthe file/connection)? Does not apply to version 1 saves.}\item{safe}{logical. If \code{TRUE}, a temporary file is used forcreating the saved workspace. The temporary file is renamed to\code{file} if the save succeeds. This preserves an existingworkspace \code{file} if the save fails, but at the cost of usingextra disk space during the save.}}\details{The names of the objects specified either as symbols (or characterstrings) in \code{\dots} or as a character vector in \code{list} areused to look up the objects from environment \code{envir}. By default\link{promises} are evaluated, but if \code{eval.promises = FALSE}promises are saved (together with their evaluation environments).(Promises embedded in objects are always saved unevaluated.)All \R platforms use the XDR (bigendian) representation of C ints anddoubles in binary save-d files, and these are portable across all \Rplatforms.ASCII saves used to be useful for moving data between platforms butare now mainly of historical interest. They can be more compact thanbinary saves where compression is not used, but are almost alwaysslower to both read and write: binary saves compress much better thanASCII ones. Further, decimal ASCII saves may not restoredouble/complex values exactly, and what value is restored may dependon the \R platform.Default values for the \code{ascii}, \code{compress}, \code{safe} and\code{version} arguments can be modified with the\code{"save.defaults"} option (used both by \code{save} and\code{save.image}), see also the \sQuote{Examples} section. If a\code{"save.image.defaults"} option is set it is used in preference to\code{"save.defaults"} for function \code{save.image} (which allowsthis to have different defaults). In addition,\code{compression_level} can be part of the \code{"save.defaults"}option.A connection that is not already open will be opened in mode\code{"wb"}. Supplying a connection which is open and not in binarymode gives an error.}\section{Compression}{Large files can be reduced considerably in size by compression. Aparticular 46MB \R object was saved as 35MB without compression in 2seconds, 22MB with \command{gzip} compression in 8 secs, 19MB with\command{bzip2} compression in 13 secs and 9.4MB with \command{xz}compression in 40 secs. The load times were 1.3, 2.8, 5.5 and 5.7seconds respectively. These results are indicative, but the relativeperformances do depend on the actual file: \command{xz} compressedunusually well here.It is possible to compress later (with \command{gzip}, \command{bzip2}or \command{xz}) a file saved with \code{compress = FALSE}: the effectis the same as saving with compression. Also, a saved file can beuncompressed and re-compressed under a different compression scheme(and see \code{\link{resaveRdaFiles}} for a way to do so from within \R).}\section{Parallel compression}{That \code{file} can be a connection can be exploited to make use ofan external parallel compression utility such as \command{pigz}(\url{http://zlib.net/pigz/}) or \command{pbzip2}(\url{http://compression.ca/pbzip2/}) \emph{via} a \code{\link{pipe}}connection. For example, using 8 threads,\preformatted{ con <- pipe("pigz -p8 > fname.gz", "wb")save(myObj, file = con); close(con)con <- pipe("pbzip2 -p8 -9 > fname.bz2", "wb")save(myObj, file = con); close(con)con <- pipe("xz -T8 -6 -e > fname.xz", "wb")save(myObj, file = con); close(con)}where the last requires \command{xz} 5.1.1 or later built with supportfor multiple threads (and parallel compression is only effective forlarge objects: at level 6 it will compress in serialized chunks of 12MB).}\note{The most common reason for failure is lack of write permission in thecurrent directory. For \code{save.image} and for saving at the end ofa session this will shown by messages like\preformatted{ Error in gzfile(file, "wb") : unable to open connectionIn addition: Warning message:In gzfile(file, "wb") :cannot open compressed file '.RDataTmp',probable reason 'Permission denied'}#ifdef windows\code{file} can be a UTF-8-encoded filepath that cannot be translated tothe current locale.#endif}\section{Warnings}{The \code{\dots} arguments only give the \emph{names} of the objectsto be saved: they are searched for in the environment given by the\code{envir} argument, and the actual objects given as arguments neednot be those found.Saved \R objects are binary files, even those saved with\code{ascii = TRUE}, so ensure that they are transferred withoutconversion of end-of-line markers and of 8-bit characters. The linesare delimited by LF on all platforms.Although the default version has not changed since \R 1.4.0, thisdoes not mean that saved files are necessarily backwards compatible.You will be able to load a saved image into an earlier version of \Runless use is made of later additions (for example, raw vectors,external pointers and some S4 objects).One such \sQuote{later addition} was long vectors, introduced in \R3.0.0 and loadable only on 64-bit platforms.Loading files saved with \code{ASCII = NA} requires a C99-compliant Cfunction \code{sscanf}: this is a problem on Windows, first workedaround in \R 3.1.2: they should be readable in earlier versions of \Ron all other platforms.}\seealso{\code{\link{dput}}, \code{\link{dump}}, \code{\link{load}},\code{\link{data}}.For other interfaces to the underlying serialization format, see\code{\link{serialize}} and \code{\link{saveRDS}}.}\examples{x <- stats::runif(20)y <- list(a = 1, b = TRUE, c = "oops")save(x, y, file = "xy.RData")save.image()unlink("xy.RData")unlink(".RData")# set save defaults using option:options(save.defaults = list(ascii = TRUE, safe = FALSE))save.image()unlink(".RData")}\keyword{file}