These function resemble save
and save.image
, with two main differences. First, any functions which have been mtrace
d (see package debug) will be temporarily untraced during saving (the debug package need not be loaded). Second, Save
and Save.pos
know how to deal with lazy-loaded objects set up via mlazy
. Save()
is like save.image()
, and also tries to call savehistory
(see Details). Save.pos(i)
saves all objects from the i
th position on the search list in the corresponding ".RData" file (or "all.rda" file for image-loading packages, or "*.rdb/*.rdx" for lazyloading packages). There is less flexibility in the arguments than for the system equivalents. If you use the cd
system in mvbutils
, you will rarely need to call Save.pos
directly; cd
, move
and FF
will do it for you.
Save()
Save.pos( pos, path, ascii=FALSE)
string or numeric position on search path, or environment (e.g. ..mypack
if "mypack" is a maintained-package).
directory or file to save into (see Details).
file type, as per save
There is a safety provision in Save
and Save.pos
, which is normally invisible to the user, but can be helpful if there is a failure during the save process (for example, if the system shuts down unexpectedly). The workspace image is first saved under a name such as "n.RData" (the name will be adapted to avoid clashes if necessary). Then, if and only if the new image file has a different checksum to the old ".RData" file, the old file will be deleted and the new one will be renamed ".RData"; otherwise, the new file will be deleted. This also means that the ".RData" file will not be updated at all if there have been no changes, which may save time when synchronizing file systems or backing up.
Two categories of objects will not be saved by Save
or Save.pos
. The first category is anything named in options( dont.save)
; by default, this is ".packageName", ".SavedPlots", "last.warning", and ".Traceback", and you might want to add ".Last.value". The second category is anything which looks like a maintained package, i.e. an environment whose name starts with ".." and which has attributes "name", "path", and "task.tree". A warning will be given if such objects are found. [From bitter experience, this is to prevent accidents on re-loading after careless mistakes such as ..mypack$newfun <- something
; what you meant, of course, is ..mypack$newfun <<- something
. Note that the accident will not cause any bad effects during the current R session, because environments are not duplicated; anything you do to the "copy" will also affect the "real" ..mypack
. However, a mismatch will occur if the environment is accidentally saved and re-loaded; hence the check in Save
.]
path
is normally inferred from the path
attribute of the pos
workspace. If no such attribute can be found (e.g. if the attached workspace was a list object), you will be prompted. If path
is a directory, the file will be called ".RData" if that file already exists, or "R/all.rda" if that exists, or "R/*.rbd" for lazy loads if that exists; and if none of these exist already, then the file will be called ".RData" after all. If you specify path
, it must be a complete directory path or file path (i.e. it will not be interpreted relative to a path
attribute).
mvbutils
uses the default compression options of save
, unless you set options()
"mvbutils.compress" and/or "mvbutils.compression_level" to appropriate values as per ?save
. The same applies to mlazy
objects. Setting options(mvbutils.compression_level=1)
can sometimes save quite a bit of time, at the cost of using more disk space. Set these options to NULL to return to the defaults.Save
calls savehistory()
. With package mvbutils from about version 2.5.6 on, savehistory
and loadhistory
will by default use the same file throughout each and every R session. That means everything works nicely for most users, and you really don't need to read the rest of this section unless you are unhappy with the default behaviour.
If you are unhappy, there are two things you might be unhappy about. First, savehistory
and loadhistory
are by default modified to always use the current value of the R_HISTFILE environment variable at the time they are called, whereas default R behaviour is to use the value when the session started, or ".Rhistory" in the current directory if none was set. I can't imagine why the default would be preferable, but if you do want to revert to it, then try to follow the instructions in ?mvbutils
, and email me if you get stuck. Second, the default for R_HISTFILE itself is set by mvbutils
to be the file ".Rhistory" in the .First.top.search
directory-- normally the one you start R in. You can change that default by specifying R_HISTFILE yourself before loading mvbutils
, in one of the many ways described by the R documentation on ?Startup
and ?Sys.getenv
.
save
, save.image
, mtrace
in package debug, mlazy
# NOT RUN {
Save() #
Save.pos( "package:mvbutils") # binary image of exported functions
Save.pos( 3, path="temp.Rdata") # path appended to attr( search()[3], "path")
# }
Run the code above in your browser using DataLab