Skip to content

R-2.15.0 and Exporting Methods Converted To S4 Generic

3 messages · Roebuck,Paul L, Uwe Ligges, Martin Morgan

#
Late to the show on this release, unfortunately.
One of our production packages no longer builds under R-2.15.0
with the following message.

** testing if installed package can be loaded
Error: Function found when exporting methods from the namespace
'SuperCurve' which is not S4 generic: 'image'


Possibly relevant clues follow:

## From R/AllGenerics.R
if (!isGeneric("image")) {
    setGeneric("image",
               function(x, ...) standardGeneric("image"))
}

We have done the same for many S3 generics, converting them
to S4 and adding specific method-combinations as such...

## From various other R files...
setMethod("image", signature(x="RPPA"), ...
setMethod("image", signature(x="RPPADesign"), ...

And then exported them for use outside the package.

## NAMESPACE
import(methods)
importFrom("graphics", image)

exportClasses(....)
exportMethods(image)


If the problem is because of the exportMethods(), I'm left
stumped as to how to work around this. Making our S4 objects
useable externally was kind of the point.


Source package available, if needed.

oompa <- "http://bioinformatics.mdanderson.org/OOMPA/2.14"
download.packages("SuperCurve", destdir=".", repos=oompa, type="source")
#
You have to export the new generic as well.

Uwe Ligges
On 12.04.2012 20:41, Roebuck,Paul L wrote:
#
On 04/13/2012 01:40 AM, Uwe Ligges wrote:
that's not correct.
I think this paradigm is left over from an earlier time; at the time of 
package installation you know that your namespace has access to 
graphics::image, and that graphics::image is not an S4 generic. Also, 
your intention is to make an S4 generic without changing the signature. 
So just

setGeneric("image")

though the more explicit setGeneric is not incorrect, and the 
conditional promotion shouldn't be incorrect either.
conceptually, having created the generic it seems like you should export 
it, but exportMethods will export the generic as well.

Your package actually installs under R-devel, and I wonder if this is a 
manifestation of the bug reported here

https://stat.ethz.ch/pipermail/r-devel/2012-April/063783.html

A work-around seems to be an unconditional setGeneric("image").

Martin