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

H.


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 <gmbec...@ucdavis.edu
<mailto:gmbec...@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.mich...@gene.com <mailto:lawrence.mich...@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
        <bodenho...@bioinf.jku.at <mailto:bodenho...@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@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: hpa...@fhcrc.org
Phone:  (206) 667-5791
Fax:    (206) 667-1319

_______________________________________________
Bioc-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/bioc-devel

Reply via email to