[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