[R] How to implement a recurring "check for updates" for R and packages?

Henrik Bengtsson hb at biostat.ucsf.edu
Wed Apr 9 18:41:26 CEST 2014

[Sounds like a question for R-devel]

On Wed, Apr 9, 2014 at 5:02 AM, Tal Galili <tal.galili at gmail.com> wrote:
> Hello all,
> I wish to add to the
> installr<http://cran.r-project.org/web/packages/installr/>package the
> ability to check for new versions of R once every X units of
> time (maybe once every two weeks).
> I would like to keep a time stamp somewhere, that would stay persistent
> across R sessions (i.e.: that if I turn R off and then back on, it would
> keep track of the last time it checked for a new R version).
> It would be best if I could save some file, maybe in the installr package
> folder, that would keep track of that.
> Any suggestions or "best practice" on how to implement something like that?

I'm not aware of any standards for where to store site- and/or
user-specific R settings that are persistent across session.  It would
certainly nice to have a standard, instead of everyone inventing their

Either way, before starting it is useful (even if you don't distribute
via CRAN) if you're aware of the following passage from
http://cran.r-project.org/web/packages/policies.html provides a fair

"- Packages should not write in the users’ home filespace, nor
anywhere else on the file system apart from the R session’s temporary
directory (or during installation in the location pointed to by
TMPDIR: and such usage should be cleaned up). Installing into the
system’s R installation (e.g., scripts to its bin directory) is not
Limited exceptions may be allowed in interactive sessions if the
package obtains confirmation from the user."

Then have a look the R.cache package.  It is used for caching objects
to file, e.g. memoization of computational expensive results.  It
addresses the above policy in the following way:

1. It checks whether ~/.Rcache/ exists or not.  If it exists, it is
assumed that it already has the user's permission.

2  Otherwise, if in an interactive R session, it asks the user for
permission to create that directory.  If successful it is created (and
it drops an informative README.txt file in there too), otherwise it
uses a temporary directory.

Here is what it looks like to first time you load R.cache:

> library(R.cache)
The R.cache package needs to create a directory that will hold cache
files. It is convenient to use one in the user's home directory,
because it remains also after restarting R. Do you wish to create the
'~/.Rcache/' directory? If not, a temporary directory
(C:\Users\hb\AppData\Local\Temp\Rtmp61upx7/.Rcache) that is specific
to this R session will be used. [Y/n]:

You can use a similar strategy.  You could also use R.cache for you
own purposes, e.g.

readURL <- function(url, maxAge=10*24*3600, force=FALSE, ...) {
  dirs <- "installr"  # => Caching to ~/.Rcache/installr/
  key <- list(method="readURL", url=url)

  # Check for cached results
  bfr <- loadCache(key=key, dirs=dirs)
  when <- attr(bfr, "when")

  # Recent enough results already available?
  if (!force && !is.null(when) && (Sys.time()-maxAge <= when))

  # Download and memoize
  bfr <- readLines(url)
  attr(bfr, "when") <- Sys.time()
  saveCache(bfr, key=key, dirs=dirs)

} # readURL()

That would memoize the results from CRAN (for 10 days by default); you
can of course cache the parsed R version etc, but I leave that to you.

(author of R.cache)

> Thanks,
> Tal
> ----------------Contact
> Details:-------------------------------------------------------
> Contact me: Tal.Galili at gmail.com |
> Read me: www.talgalili.com (Hebrew) | www.biostatistics.co.il (Hebrew) |
> www.r-statistics.com (English)
> ----------------------------------------------------------------------------------------------
>         [[alternative HTML version deleted]]
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.

More information about the R-help mailing list