[Rd] install.packages question / suggestion

Thomas Stabla statho3 at web.de
Fri Oct 22 19:05:30 CEST 2004


Hello,

when trying to write an R-file, which automatically installs and updates a 
given list of packages, I had two problems with install.packages()

1) install.packages("<package>") will install <package>, no matter if 
   <package> has already been installed.
2) the readline() at the end of install.packages, which asks the user, if 
   the downloaded files should be deleted, makes it difficult to 
   delete packages automatically after installation (I must admit, I'm not 
   quite familiar with R CMD BATCH)


Question/Request:
Is the behaviour in 1) intended?
2) I'd like to have another bool argument, which determines, if the 
downloaded files should be deleted.

Suggestion:
To change 1) I've made a small change to 

  R-2.0.0/src/library/utils/unix/install.packages.R

adding one line and moving another one. Here's the diff output


--- install.packages.R  2004-10-02 19:07:34.000000000 +0200
+++ install.packages.modified.R 2004-10-22 18:22:01.275986160 +0200
@@ -25,9 +25,9 @@
     }
     if(is.null(available))
         available <- CRAN.packages(contriburl = contriburl, method = 
method)
+    have <- .packages(all.available = TRUE)
     if(dependencies) { # check for dependencies, recursively
         p0 <- p1 <- unique(pkgs) # this is ok, as 1 lib only
-        have <- .packages(all.available = TRUE)
         repeat {
             if(any(miss <- ! p1 %in% row.names(available))) {
                 cat("dependencies ", paste(sQuote(p1[miss]), sep=", "),
@@ -54,6 +54,8 @@
         }
     }

+    pkgs <- pkgs[ ! pkgs %in% have ]
+
     foundpkgs <- download.packages(pkgs, destdir = tmpd, available = available,
                                    contriburl = contriburl, method = method)




Best Regards,
Thomas Stabla
-------------- next part --------------
--- install.packages.R	2004-10-02 19:07:34.000000000 +0200
+++ install.packages.modified.R	2004-10-22 18:22:01.275986160 +0200
@@ -25,9 +25,9 @@
     }
     if(is.null(available))
         available <- CRAN.packages(contriburl = contriburl, method = method)
+    have <- .packages(all.available = TRUE)
     if(dependencies) { # check for dependencies, recursively
         p0 <- p1 <- unique(pkgs) # this is ok, as 1 lib only
-        have <- .packages(all.available = TRUE)
         repeat {
             if(any(miss <- ! p1 %in% row.names(available))) {
                 cat("dependencies ", paste(sQuote(p1[miss]), sep=", "),
@@ -54,6 +54,8 @@
         }
     }
 
+    pkgs <- pkgs[ ! pkgs %in% have ]
+    
     foundpkgs <- download.packages(pkgs, destdir = tmpd, available = available,
                                    contriburl = contriburl, method = method)
 


More information about the R-devel mailing list