[BioC] rcmd check does not recognize generic function definitions

Gordon Smyth smyth@wehi.edu.au
Tue, 18 Feb 2003 16:08:51 +1100


Dear all,

I am trying to package up some microarray data analysis code into a 
bioconductor package and, naturally, I want to define some new generic 
functions using the methods library. I have not been able to get my package 
to pass rcmd check.  In particular, generic functions which I have defined 
are not recognized when rcmd check tries out the examples.  However, all 
the examples work correctly if I actually build the library using rcmd 
build, then install it and load it in my R session using library.  The 
examples then work correctly if I paste them into my R session.

I have isolated the problem (no doubt only one of many) in a trivial 
example which I give below.

I get similar results with R 1.6.2 under Windows 2000 and with R 1.6.1 
under linux.  I am happily running rcmd check on libraries which do not use 
the formal methods of the package methods.

Questions:
1. Is rcmd check intended to work properly with formal S4-style classes and 
methods?
2. How can I change my code so that it passes rcmd check?
3. Does the failure with rcmd check indicate a genuine problem with my code?
4. Is there any documentation that I should be reading? (The R document 
"Writing R Extensions" says that it does not cover formal methods of 
package methods of R. The "green book" by Chambers does not cover anything 
R specific. I have not found any HowTo's, Vignettes or FAQs on 
bioconductor.org which deal with writing code for Bioconductor.)

Any help or feedback gratefully recieved.
Gordon


My trivial example is a test library called "test". The directory test/R 
contains one file "test.R" and the directory test/man contains one file 
"myGenericFun.Rd". The file contents are:

--------------------------------- test.R ----------------------------------
require(methods)

setGeneric("myGenericFun",
	function(object) standardGeneric("myGenericFun"))

setMethod("myGenericFun","ANY",
	function(object) paste("myGenericFun on object of class",class(object))
)

setMethod("myGenericFun","matrix",
	function(object) "myGenericFun for matrices"
)
--------------------------------- end test.R ------------------------------

---------------------- start myGenericFun.Rd -------------
\name{myGenericFun}
\alias{myGenericFun}
\title{My Generic Function}
\description{A simple example generic function.}

\usage{myGenericFun(object)}

\arguments{
   \item{object}{Any R object. A special method exists for objects of class 
"matrix".}
}

\value{A character string explaining the class of object and the method 
dispatched.}

\examples{
x <- rnorm(10)
myGenericFun(x) # x is a vector
dim(x) <- c(5,2)
myGenericFun(x) # x is now a matrix
}

\keyword{models}
------------------------- end myGenericFun.Rd ---------------------------

If I source the file test.R to my R session and then run for myself the 
code in the example, it works fine:

 > x <- rnorm(10)
 > myGenericFun(x)
[1] "myGenericFun on object of class numeric"
 > dim(x) <- c(5,2)
 > myGenericFun(x)
[1] "myGenericFun for matrices"

However rcmd check fails because it does not detect any code objects 
defined. I have tried it with R 1.6.1 under linux and with R 1.6.2 under 
Windows 2000. The log-file from rcmd check using R 1.6.2 under Windows 2000 is:

* using log directory 'C:/Gordon/lib/R/test.Rcheck'
* checking for file 'test/DESCRIPTION' ... OK
* checking if this is a source package ... OK
* checking package directory ... OK
* checking DESCRIPTION Package field ... OK
* checking DESCRIPTION Version field ... OK
* checking DESCRIPTION License field ... OK
* checking DESCRIPTION Description field ... OK
* checking DESCRIPTION Title field ... OK
* checking DESCRIPTION Author field ... OK
* checking DESCRIPTION Maintainer field ... OK
* checking DESCRIPTION Depends field ... OK
* checking index files ... OK
* checking R files for syntax errors ... OK
* checking R files for library.dynam ... OK
* checking generic/method consistency ... OK
* checking for assignment functions with final arg not named 'value' ... OK
* checking Rd files ... OK
* checking for undocumented objects ... WARNING
Warning message:
Neither code nor data objects found in: undoc(dir = "C:/Gordon/lib/R/test")
* checking for code/documentation mismatches ... WARNING
Objects with usage in documentation object 'myGenericFun' but missing from 
code:
[1] "myGenericFun"

* checking for undocumented arguments in \usage ... OK
* creating test-Ex.R ... OK
* checking examples ... ERROR
Running examples failed.

The examples output file ends with the error, "Error: couldn't find 
function "myGenericFun"".

Under linux the output from RCMD check is somewhat less explanatory, but I 
think still relates to the same problem:

* checking for working latex ... OK
* using log directory
'/export/share/disk501/lab0605/wettenhall/Rlibs/test.Rcheck'
* checking for file 'test/DESCRIPTION' ... OK
* checking if this is a source package ... OK

* Installing *source* package 'test' ...
** R
** help
  >>> Building/Updating help pages for package 'test'
      Formats: text html latex example
   myGenericFun                      text    html    latex
example
* DONE (test)

* DONE (INSTALL)

* checking package directory ... OK
* checking for sufficient/correct file permissions ... OK
* checking DESCRIPTION Package field ... OK
* checking DESCRIPTION Version field ... OK
* checking DESCRIPTION License field ... OK
* checking DESCRIPTION Description field ... OK
* checking DESCRIPTION Title field ... OK
* checking DESCRIPTION Author field ... OK
* checking DESCRIPTION Maintainer field ... OK
* checking DESCRIPTION Depends field ... OK
* checking index files ... OK
* checking R files for syntax errors ... OK
* checking R files for library.dynam ... OK
* checking generic/method consistency ... OK
* checking for assignment functions with final arg not named
'value' ... OK
* checking Rd files ... OK
* checking for undocumented objects ... ERROR
Error in undoc(package = "test") : invalid subscript type
---------------------------------------------------------------------------------------
Dr Gordon K Smyth, Senior Research Scientist, Bioinformatics,
Walter and Eliza Hall Institute of Medical Research,
1G Royal Parade, Parkville, Vic 3050, Australia
Tel: (03) 9345 2326, Fax (03) 9347 0852,
Email: smyth@wehi.edu.au, www: http://www.statsci.org