[R] testInstalledBasic question

Jim Price price_ja at hotmail.com
Wed May 5 23:05:38 CEST 2010


I'm currently in the process of writing an R-installation SOP for my
company. As part of that process I'm using the recommendations from the 'R
Installation and Administration' document, section 3.2, "Testing an
installation". This is done on an XP machine, using the latest binary of

The binary is downloaded and then installed from the installer. I then start
an Rgui.exe session with --vanilla enabled. At this point:

> sessionInfo()
R version 2.11.0 (2010-04-22) 

[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United
States.1252    LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C                           LC_TIME=English_United

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

Next I start testing, using the following:

testInstalledBasic(scope = 'devel')   # Just checking devel for illustrative

Results displayed are as follows:

running tests of consistency of as/is.*
creating ‘isas-tests.R’
  running code in ‘isas-tests.R’
  comparing ‘isas-tests.Rout’ to ‘isas-tests.Rout.save’ ...running tests of
random deviate generation -- fails occasionally
  running code in ‘p-r-random-tests.R’
  comparing ‘p-r-random-tests.Rout’ to ‘p-r-random-tests.Rout.save’
...running tests of primitives
  running code in ‘primitives.R’
Warning messages:
1: In system(paste("diff -bw", shQuote(a), shQuote(b))) : diff not found
2: In system(paste("diff -bw", shQuote(a), shQuote(b))) : diff not found

In the tests directory, in primitives.rout.fail I see the following:

> ## check that they do argument matching, or at least check names
> except <- c("call", "switch", ".C", ".Fortran", ".Call", ".External",
+             ".Call.graphics", ".External.graphics", ".subset", ".subset2",
+             ".primTrace", ".primUntrace", "lazyLoadDBfetch",
+             ".Internal", ".Primitive", "^", "|", "%*%", "rep", "seq.int",
+             ## these may not be enabled
+             "tracemem", "retracemem", "untracemem")
> for(f in ls(.GenericArgsEnv, all.names=TRUE)[-(1:15)])
+ {
+     if (f %in% except) next
+     g <- get(f, envir = .GenericArgsEnv)
+     an <- names(formals(args(g)))
+     if(length(an) >0 && an[1] == "...") next
+     an <- an[an != "..."]
+     a <- rep(list(NULL), length(an))
+     names(a) <- c("zZ", an[-1])
+     res <- try(do.call(f, a), silent = TRUE)
+     m <- geterrmessage()
+     if(!grepl('does not match|unused argument', m))
+         stop("failure on ", f)
+ }
Error: failure on >=
Execution halted

A quick check in the console gives this:

> ls(.GenericArgsEnv, all.names = TRUE)
 [1] "!"            "!="           "%%"           "%/%"          "&"           
"*"            "+"           
 [8] "-"            "/"            "<"            "<="           "=="          
">"            ">="          
[15] "Arg"          "Conj"         "Im"           "Mod"          "Re"          
"^"            "abs"         
[22] "acos"         "acosh"        "all"          "any"         
"as.character" "as.complex"   "as.double"   
[29] "as.integer"   "as.logical"   "as.numeric"   "as.raw"       "as.real"     
"asin"         "asinh"       
[36] "atan"         "atanh"        "c"            "ceiling"      "cos"         
"cosh"         "cummax"      
[43] "cummin"       "cumprod"      "cumsum"       "digamma"      "dim"         
"dim<-"        "dimnames"    
[50] "dimnames<-"   "exp"          "expm1"        "floor"        "gamma"       
"is.array"     "is.finite"   
[57] "is.infinite"  "is.matrix"    "is.na"        "is.nan"      
"is.numeric"   "length"       "length<-"    
[64] "levels<-"     "lgamma"       "log"          "log10"        "log1p"       
"log2"         "max"         
[71] "min"          "names"        "names<-"      "prod"         "range"       
"rep"          "round"       
[78] "seq.int"      "sign"         "signif"       "sin"          "sinh"        
"sqrt"         "sum"         
[85] "tan"          "tanh"         "trigamma"     "trunc"        "xtfrm"       

Which confuses me, because the calling code in tests\\primitives.R removes
the first 15 elements, which includes ">=" which the test is failing on.

To check (and because testInstalledBasic is calling out to a separate, new R
process), I repeated the testInstalledBasic functionality ex-function; so in
a clean session I ran the following:

### Clean session ###

Sys.setenv(LANGUAGE = "C")
Sys.setenv(R_DEFAULT_PACKAGES = "")
Sys.setenv(SRCDIR = ".")

oldwd <- setwd(file.path(R.home(), 'tests'))

source('primitives.R', echo = T)


# Fails with: Error in eval.with.vis(expr, envir, enclos) : failure on >=

Now my checking gives:

> ls(.GenericArgsEnv, all.names = TRUE)
 [1] "-"            "!"            "!="           "%%"           "%/%"         
"&"            "*"            "/"           
 [9] "^"            "|"            "+"            "<"            "<="          
"=="           ">"            ">="          
[17] "abs"          "acos"         "acosh"        "all"          "any"         
"Arg"          "as.character" "as.complex"  
[25] "as.double"    "as.integer"   "as.logical"   "as.numeric"   "as.raw"      
"as.real"      "asin"         "asinh"       
[33] "atan"         "atanh"        "c"            "ceiling"      "Conj"        
"cos"          "cosh"         "cummax"      
[41] "cummin"       "cumprod"      "cumsum"       "digamma"      "dim"         
"dim<-"        "dimnames"     "dimnames<-"  
[49] "exp"          "expm1"        "floor"        "gamma"        "Im"          
"is.array"     "is.finite"    "is.infinite" 
[57] "is.matrix"    "is.na"        "is.nan"       "is.numeric"   "length"      
"length<-"     "levels<-"     "lgamma"      
[65] "log"          "log10"        "log1p"        "log2"         "max"         
"min"          "Mod"          "names"       
[73] "names<-"      "prod"         "range"        "Re"           "rep"         
"round"        "seq.int"      "sign"        
[81] "signif"       "sin"          "sinh"         "sqrt"         "sum"         
"tan"          "tanh"         "trigamma"    
[89] "trunc"        "xtfrm"       

Now ">=" is the 16th element of the environment, which suggests that this is
why my testing is failing.

Am I doing something wrong? Should the actual code in tests\\primitives.R
be: for(f in ls(.GenericArgsEnv, all.names=TRUE)[-(1:16)]) instead of 1:15
(or be OS dependent)?

Any comments and help welcomed. If I'm unclear in any steps I've taken
please feel free to correct me.

Jim Price.
Cardiome Pharma Corp.

View this message in context: http://r.789695.n4.nabble.com/testInstalledBasic-question-tp2131680p2131680.html
Sent from the R help mailing list archive at Nabble.com.

R-help at r-project.org mailing list
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