readRDS {base} | R Documentation |
Serialization Interface for Single Objects
Description
Functions to write a single R object to a file, and to restore it.
Usage
saveRDS(object, file = "", ascii = FALSE, version = NULL,
compress = TRUE, refhook = NULL)
readRDS(file, refhook = NULL)
infoRDS(file)
Arguments
object |
R object to serialize. |
file |
a connection or the name of the file where the R object is saved to or read from. |
ascii |
a logical. If |
version |
the workspace format version to use. |
compress |
a logical specifying whether saving to a named file is
to use |
refhook |
a hook function for handling reference objects. |
Details
saveRDS
and readRDS
provide the means to save a single R
object to a connection (typically a file) and to restore the object, quite
possibly under a different name. This differs from save
and
load
, which save and restore one or more named objects into
an environment. They are widely used by R itself, for example to store
metadata for a package and to store the help.search
databases: the ".rds"
file extension is most often used.
Functions serialize
and unserialize
provide a slightly lower-level interface to serialization: objects
serialized to a connection by serialize
can be read back by
readRDS
and conversely.
Function infoRDS
retrieves meta-data about serialization produced
by saveRDS
or serialize
. infoRDS
cannot be used to
detect whether a file is a serialization nor whether it is valid.
All of these interfaces use the same serialization format, but save
writes a single line header (typically "RDXs\n"
) before the
serialization of a single object (a pairlist of all the objects to be
saved).
If file
is a file name, it is opened by gzfile
except for save(compress = FALSE)
which uses
file
. Only for the exception are marked encodings of
file
which cannot be translated to the native encoding handled
on Windows.
Compression is handled by the connection opened when file
is a
file name, so is only possible when file
is a connection if
handled by the connection. So e.g. url
connections will need to be wrapped in a call to gzcon
.
If a connection is supplied it will be opened (in binary mode) for the
duration of the function if not already open: if it is already open it
must be in binary mode for saveRDS(ascii = FALSE)
or to read
non-ASCII saves.
Value
For readRDS
, an R object.
For saveRDS
, NULL
invisibly.
For infoRDS
, an R list with elements version
(version
number, currently 2 or 3), writer_version
(version of R that
produced the serialization), min_reader_version
(minimum version of
R that can read the serialization), format
(data representation)
and native_encoding
(native encoding of the session that produced
the serialization, available since version 3). The data representation is
given as "xdr"
for big-endian binary representation, "ascii"
for ASCII representation (produced via ascii = TRUE
or ascii
= NA
) or "binary"
(binary representation with native
‘endianness’ which can be produced by serialize
).
Warning
Files produced by saveRDS
(or serialize
to a file
connection) are not suitable as an interchange format between
machines, for example to download from a website. The
files produced by save
have a header identifying the
file type and so are better protected against erroneous use.
See Also
The ‘R Internals’ manual for details of the format used.
Examples
fil <- tempfile("women", fileext = ".rds")
## save a single object to file
saveRDS(women, fil)
## restore it under a different name
women2 <- readRDS(fil)
identical(women, women2)
## or examine the object via a connection, which will be opened as needed.
con <- gzfile(fil)
readRDS(con)
close(con)
## Less convenient ways to restore the object
## which demonstrate compatibility with unserialize()
con <- gzfile(fil, "rb")
identical(unserialize(con), women)
close(con)
con <- gzfile(fil, "rb")
wm <- readBin(con, "raw", n = 1e4) # size is a guess
close(con)
identical(unserialize(wm), women)
## Format compatibility with serialize():
fil2 <- tempfile("women")
con <- file(fil2, "w")
serialize(women, con) # ASCII, uncompressed
close(con)
identical(women, readRDS(fil2))
fil3 <- tempfile("women")
con <- bzfile(fil3, "w")
serialize(women, con) # binary, bzip2-compressed
close(con)
identical(women, readRDS(fil3))
unlink(c(fil, fil2, fil3))