NEWS.md
The location of the root cache folder as introduced in R.cache 0.14.0 has been updated to match that of tools::R_user_dir()
, which was introduced in R 4.0.0. On Linux, this was already the case in R.cache 0.14.0, whereas on macOS and MS Windows, the folder locations have changed slightly. If an old cache folder location is detected, then the user will be queried what action to take, i.e. abort, ignore the old folder, remove the old folder, or move the old folder to the new location. In non-interactive mode, the default action is always to ignore.
The package will no longer ask for permission to create the cache folder as long as the cache folder is compatible with tools::R_user_dir()
.
~/.Rcache
. On Unix, the ‘XDG Base Directory Specification’ is followed, which means that the R.cache folder will typically be ~/.cache/R/R.cache/
. On macOS, it will be ~/Library/Caches/R/R.cache/
. On modern versions of Microsoft Windows, environment variables such as LOCALAPPDATA
will be used, which typically resolves to %USERPROFILE%/AppData/Local
, e.g. C:/Users/alice/AppData/Local
. If R.cache fails to find a proper OS-specific cache folder, it will fall back to using ~/.Rcache
as previously done. Importantly, if ~/.Rcache
already exists, then that will be used by default. This is done in order to not lose previously cached files. Users with an existing folder who wish to move to the new standard need to move or remove the ~/.Rcache
folder manually.Add generateCache()
to generate cache pathnames from a key without creating the cache file. This function was previously not exported.
Option R.cache.rootPath
now defaults to environment variable R_CACHE_ROOTPATH
if it is set.
evalWithMemoization()
gained argument drop
to specify which attributes to drop from the expression object. The default is to now drop any source-reference attributes.
Bug Fixes
evalWithMemoization(expr)
failed to memoize in knitr documents because although the same expr
was specified they differed internally due to source-reference attributes.
evalWithMemoization()
used partial dollar name matching in one place.
R.cache::rootPath
, R.cache::touchOnLoad
, and R.cache::compress
are now defunct. Likewise, environment variable R_CACHE_PATH
and argument onError="print"
for loadCache()
are now defunct.Now package gives a more informative error message in the rare cases it fails to create the cache root directory or fails to save a cache file.
Updated loadCache()
to recognize new file-format version 3 coming to R.
Added options R.cache.enabled
, which defaults to TRUE, for controlling whether loadCache()
and saveCache()
should read/write from cache or not. This provides an easy mechanism for temporarily disabling R.cache.
Harmonized R.cache options to all have names prefixed with R.cache.
.
clearCache()
now prompts the user via readline()
, which is always visible, i.e. it can neither be captured nor sinked.
Using onError = "print"
for loadCache()
is deprecated and replaced by new onError = "message"
.
Deprecated R.cache options R.cache::rootPath
, R.cache::touchOnLoad
, and R.cache::compress
. Use R.cache.rootPath
, R.cache.touchOnLoad
, and R.cache.compress
instead.
Now all prompt and verbose messages are send to the standard error (instead of the standard output).
SPEEDUP: Now memoizedCall()
generates cache pathname only once.
verbose
from memoizedCall()
.memoizeCall()
and addMemoization()
.Bug Fixes
addMemoization()
will no longer memoize an already memoized function.generateCache()
with key = NULL
would give a hard-to-understand error message. Now it’s more informative.Added arguments path
and rootPath
to getCachePath()
.
Added argument pathname
to saveCache()
.
Bug Fixes
~/.Rcache/
, which in turn could cause that path to be create without asking the user. For instance, R.cache::loadCache(list())
would do. Thanks to Kurt Hornik at Vienna University of Economics and Business for reporting on this.Bug Fixes
clearCache()
is exported (re-exported from R.oo).Bug Fixes
R.cache:::.assertDigest()
called from within another package would give an error that packageVersion()
of utils was not found.getChecksum()
passes ...
to digest()
, e.g. argument algo
.loadCache()
- replaced an rm()
call with NULL assignment.Bug Fixes
...
to NextMethod()
, cf. R-devel thread ‘Do not pass’…’ to NextMethod() - it’ll do it for you; missing documentation, a bug or just me?’ on Oct 16, 2012..Rcache/
directory to _Rcache/
to avoid R CMD check
NOTEs..Internal()
for loading saved data. This could be done in a backward-compatible way using readRDS()
..Internal()
function.~/.Rcache/
. However, if it does not exists, then it is created when the package is loaded, but only after approval by the user (via a textual prompt). If not approved, or it is not possible to prompt the user (e.g. in a non-interactive session), then a session-specific temporary directory is used.getCachePath()
and setCacheRootPath()
add a README.txt file to the root path, iff missing. It explains why the directory structure exists, what created it, and that it is safe to delete.Bug Fixes
Bug Fixes
readCacheHeader()
iff running R v2.12.2 or before. Thanks to Uwe Ligges (R core) for reporting on this.Added support for saving and loading compressed cache files.
Now package uses packageStartupMessage()
instead of cat()
.
findCache()
asserts that any identified cache file is really a file.prompt
for clearCache()
defaults to TRUE iff interactive()
is TRUE, otherwise FALSE.clearCache()
.Now generateCache()
utilizes a generic function getChecksum()
to obtain the checksum. This makes it possible to customize how checksums are calculated for different classes of objects.
Added a default getChecksum()
which utilizes digest::digest()
.
Added getChecksum()
for the Object
, which first clears the cache of the object and the calls the default ditto.
Added trial version of evalWithMemoization()
.
Bug Fixes
clearCache()
would also report on subdirectories.memoizedCall()
and addMemoization()
.Bug Fixes
loadFromConn()
does not exists.onError
to loadCache()
, to specify the action when an error occurs. The default used to be to print the error message (onError = "print"
), but now it generates a warning ("warning"
). The other alternatives are do silently ignore it, or to throw the error ("error"
). Except for onError = "error"
, loadCache()
always returns NULL if an error occurs.readCacheHeader()
reports the “pathname” in error/warnings messages, if argument file
refers to a file and the “description” if it refers to a connection.ROBUSTNESS: Added sanity check to readCacheHeader()
testing that the read header identifier is non-empty. This results in a clearer error message that before.
Renamed the HISTORY file to NEWS.
Added option to updated the “last-modified” timestamp of cache files whenever they are loaded via loadCache()
. This will help identified what cache files have not been used for a long time. To turn this on, use options("R.cache::touchOnLoad" = TRUE)
.
Now error messages specifies the pathname, if available.
Bug Fixes
throw()
for invalid identifiers was trying to put the connection object in the output and not the identifier.getCacheRootPath()
to the help index page.getCacheRootPath()
and setCacheRootPath()
to specify where the root of the file path is located.Now saveCache()
and loadCache()
takes optional argument dirs
for caching data to subdirectories of the root cache directory.
Added setCacheRootPath()
to set the root cache directory.
pathname
to loadCache()
in order to load “unknown” cache files for which the key is unknown.Bug Fixes
base::save()
, which otherwise includes all of the surrounding environment if ‘sources’ is not evaluated/missing. For more details see code and my email to r-devel on 2006-05-25. Thanks to Brian Ripley for explaining what was going on.Added readCacheHeader()
.
Added detection of file format version.
Using a special binary file format now. It allows you to check if cache is up-to-date to a source file. If not, the rest of the cache binary file is not loaded.
Added loadCache()
and saveCache()
methods.
Created.