Skip to content

Advice about system for installing & updating all R package in a Linux Lab?

5 messages · Paul Johnson, Henrik Bengtsson, Jonathan Baron +2 more

#
Good day:

I'm administering 6 linux systems (FC4) in a student lab and worry that 
users may want packages that are not installed.  I get tired of adding 
them one by one.  Then I happened upon this page

http://support.stat.ucla.edu/view.php?supportid=30

about installing all R packages from CRAN.  That did not run as it was, 
but after some fiddling I arrived at the following script, which does 
run and it builds many packages and reports failures on the rest:

#R_installAll.R
options(repos = "http://lib.stat.cmu.edu/R/CRAN/")
update.packages(ask=F)
x <- packageStatus(repositories="http://cran.r-project.org/src/contrib")
st <- x$avai["Status"]
install.packages(rownames(st)[which(st$Status=="not installed")], 
dependencies=T)

If I run that in batch mode (as root, of course)

 >  R CMD BATCH R_installAll.R

It produces some informative output. Some packages don't build because 
they are for Windows.  As Prof Ripley mentioned recently, some packages 
don't build because of gcc-4.0.1. Some fail because I don't have some 
requisite libraries installed.  I try to deduce which FC packages may be 
used to fix that and iterate the process now and then.

But, for the most part, the packages to be OK (as far as I can tell). 
The output of a recent update is posted on the net here, in case you are 
interested to see (this lists the ones that don't build plus the 
successful updates):

http://lark.cc.ku.edu/~pauljohn/software/R/R_installAll.Rout

I can't see how this does any damage, since the packages that don't 
build are very graceful about erasing themselves, and the ones that do 
build are automatically available for the users.

Can you see any downside to scheduling this process to run as a cron 
job, say once per week, to keep packages up to date?
#
You can also provide the users with the option to add/update their own 
packages locally via install- and update.packages().  Here's a piece of 
bash code that sets R_LIBS for to a OS specific directory in the users 
account. Add it to the system wide startup script.

if test "${R_LIBS}" = ""; then
   # Get the OS type in lower case
   ostype=`uname -s | tr '[A-Z]' '[a-z]'`
   export R_LIBS=${HOME}/R/R_LIBS/${ostype}/library/
   if ! test -d "${R_LIBS}"; then
     mkdir -p ${R_LIBS}
   fi
fi

Cheers

Henrik
Paul Johnson wrote:
#
On 08/19/05 16:23, Paul Johnson wrote:
I used to do this:

    update.packages()
    cp <- CRAN.packages()[,1]
    ip <- installed.packages()[,1,]
    install.packages(setdiff(cp,ip))

But now it looks like you can do this:

    install.packages(new.packages())

Jon
#
This is based on the pre-2.1.0 ideas.  Try

update.packages(ask=FALSE)
install.packages(new.packages(), dependencies=TRUE)

However, I would suggest that you set up each student with a library, say 
~/R/library, and point R_LIBS at it (set in Renviron.site).  That's what 
we do for Windows, and it seems successful.  (We have other reasons to 
want very complete central Linux setups, one being that we run more than 
one archtecture where personal libraries are a little harder to manage.)
On Fri, 19 Aug 2005, Paul Johnson wrote:

            
Many of the commands there are now or about to be deprecated.  See my 
article in the current R-News.
None at all.  We do something similar (but based on new.packages and with 
a stoplist of packages that we know will not install).
1 day later
#
Paul Johnson wrote:

            
One other option is if those packages get in Fedora Extras. :-)
  I intend to submit some packages to FE, and then upgrading will be a lot
easier.

  What are the packages that interest you?