[Bioc-devel] [Rd] Conflicting definitions for function redefined as S4 generics

Hervé Pagès hpages at fhcrc.org
Thu Mar 27 18:31:09 CET 2014

On 03/27/2014 02:13 AM, Ulrich Bodenhofer wrote:
> I fully agree, Michael, that this would be a great thing to have! I have
> often wondered why R and the standard packages are still sticking so
> much to the old-style S3 flavor though S4 is part of standard R. I
> acknowledge that backward compatibility is important, but, as far as I
> got it, redefining a function or S3 generic as an S4 generic should not
> harm existing functionality (if done properly). If it turns out not to
> be a good option to do this in the base package, why not as part of the
> methods package? That will leave existing functionality of base
> unchanged and will provide a clean situation to all users/packages using
> S4.
> This should not create a compatibility problem on the Bioconductor side
> either, since Bioconductor releases are explicitly bound to specific R
> versions. Once again: I fully support this idea (not only for sort(),
> but also for a wide range of other functions), though, not being an R
> core team member, I do not really feel in the position to demand such a
> fundamental change.
> For the time being, it seems I have three options:
> 1) not supplying the sort() function yet (it is not yet in the release,
> but only in my internal devel version)
> 2) including a dependency to BiocGenerics
> 3) leaving the problem open, mentioning in the documentation that users
> who want to use apcluster in conjunction with Bioconductor should load
> BiocGenerics first

4) define an S3 method, as mentioned in my previous post


> As far as I got it, there seems to be no other clean way to get rid of
> the problem, right?
> Best regards,
> Ulrich
> On 03/26/2014 02:44 PM, Michael Lawrence wrote:
>> That might be worth thinking about generally, but it would still be
>> nice to have the base generics pre-defined, so that people are not
>> copy and pasting the definitions everywhere, hoping that they stay
>> consistent.
>> On Wed, Mar 26, 2014 at 6:13 AM, Gabriel Becker <gmbecker at ucdavis.edu
>> <mailto:gmbecker at ucdavis.edu>> wrote:
>>     Perhaps a patch to R such that generics don't clobber each-other's
>>     method tables if the signatures agree? I haven't dug deeply, but
>>     simply merging the method tables seems like it would be safe when
>>     there are no conflicts.
>>     That way this type of multiplicity would not be a problem, though
>>     it wouldn't help (as it shouldn't) if the two generics didn't
>>     agree on signature or both carried methods for the same class
>>     signature.
>>     ~G
>>     On Wed, Mar 26, 2014 at 4:38 AM, Michael Lawrence
>>     <lawrence.michael at gene.com <mailto:lawrence.michael at gene.com>> wrote:
>>         The BiocGenerics package was designed to solve this issue within
>>         Bioconductor. It wouldn't be the worst thing in the world to
>>         depend on the
>>         simple BiocGenerics package for now, but ideally the base
>>         generics would be
>>         defined higher up, perhaps in the methods package itself.
>>         Maybe someone
>>         else has a more creative solution, but any sort of
>>         conditional/dynamic
>>         approach would probably be too problematic in comparison.
>>         Michael
>>         On Wed, Mar 26, 2014 at 4:26 AM, Ulrich Bodenhofer
>>         <bodenhofer at bioinf.jku.at <mailto:bodenhofer at bioinf.jku.at>
>>         > wrote:
>>         > [cross-posted to R-devel and bioc-devel]
>>         >
>>         > Hi,
>>         >
>>         > I am trying to implement a 'sort' method in one of the CRAN
>>         packages I am
>>         > maintaining ('apcluster'). I started with using
>>         setMethod("sort", ...) in
>>         > my package, which worked fine. Since many users of my
>>         package are from the
>>         > bioinformatics field, I want to ensure that my package works
>>         smoothly with
>>         > Bioconductor. The problem is that the BiocGenerics package
>>         also redefines
>>         > 'sort' as an S4 generic. If I load BiocGenerics before my
>>         package,
>>         > everything is fine. If I load BiocGeneric after I have
>>         loaded my package,
>>         > my setMethod("sort", ...) is overridden by BiocGenerics and
>>         does not work
>>         > anymore. A simple solution would be to import BiocGenerics
>>         in my package,
>>         > but I do not want this, since many of this package's users
>>         are outside the
>>         > bioinformatics domain. Moreover, I am reluctant to include a
>>         dependency to
>>         > a Bioconductor package in a CRAN package. I thought that
>>         maybe I could
>>         > protect my setMethod("sort", ...) from being overridden by
>>         BiocGeneric by
>>         > sealed=TRUE, but that did not work either. Any ideas are
>>         gratefully
>>         > appreciated!
>>         >
>>         > Thanks a lot,
>>         > Ulrich
>>         >
> _______________________________________________
> Bioc-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/bioc-devel

Hervé Pagès

Program in Computational Biology
Division of Public Health Sciences
Fred Hutchinson Cancer Research Center
1100 Fairview Ave. N, M1-B514
P.O. Box 19024
Seattle, WA 98109-1024

E-mail: hpages at fhcrc.org
Phone:  (206) 667-5791
Fax:    (206) 667-1319

More information about the Bioc-devel mailing list