From mtmorgan at fhcrc.org  Fri Dec 14 08:58:54 2012
From: mtmorgan at fhcrc.org (Martin Morgan)
Date: Fri, 14 Dec 2012 08:58:54 +0100
Subject: [Rd] namespace S3 and S4 generic imports cannot both be
	satisfied:
In-Reply-To: <50C4E63B.1060207@r-project.org>
References: <50C3C7C1.5050508@fhcrc.org> <50C4E63B.1060207@r-project.org>
Message-ID: <50CADC3E.4000309@fhcrc.org>

On 12/09/2012 08:27 PM, John Chambers wrote:
> Yes, you are right.
>
> Mixing S3 and S4 methods for a generic is fine, although in subtle cases one is
> safer promoting the S3 method to an S4 method, as you did in your example.
>
> Usually, the default method for the S4 generic is the S3 generic.  But, in
> general, it's not possible to check algorithmically whether the S3 methods will
> be dispatched.  For example, an S4 method on "vector" could dispatch S3 methods
> on subclasses "numeric", etc. (don't ask why ...), for a generic that had no
> default method.
>
> That the trouble with this check isn't found right away is likely because one is
> typically working with a primitive where no generic function is created.
>
> Should be fixed in rev. 61263.  Please check on your real example; it seems fine
> on the test you submitted.

Thanks, this addresses the problem for our real example. Martin

>
> Thanks for the catch.
>
> John
>
> On 12/8/12 3:05 PM, Martin Morgan wrote:
>> PkgA wishes to write a method for 'unique' on S4 class 'A'. ?Methods
>> indicates that one should
>>
>>    setGeneric("unique")
>>
>>    setClass("A")
>>    unique.A <- function(x, incomparables=FALSE, ...) {}
>>    setMethod(unique, "A", unique.A)
>>
>> Both S3 and S4 methods need to be exported in the NAMESPACE
>>
>>    import(methods)
>>    S3method(unique, A)
>>    exportMethods(unique)
>>
>> PkgB introduces a new class and method
>>
>>    setClass("B")
>>    unique.B <- function(x, incomparables=FALSE, ...) {}
>>    setMethod(unique, "B", unique.B)
>>
>> and in the NAMESPACE has
>>
>>    import(methods)
>>    importFrom(PkgA, unique)
>>    S3method(unique, B)
>>    exportMethods(unique)
>>
>> Unfortuantely, R CMD check says that
>>
>> * checking whether package 'PkgB' can be installed ... WARNING
>> Found the following significant warnings:
>>    Warning: found an S4 version of 'unique' so it has not been imported
>> correctly
>> See '/home/mtmorgan/tmp/PkgB.Rcheck/00install.out' for details.
>>
>> This is from (svn r61253) R-devel/src/library/base/R/namespace.R:1339,
>> where the code finds the S4 generic, but not the S3 generic. Obviously
>> the namespace cannot have both the S3 and S4 symbols defined, but this
>> seems to be required? A workaround might extend the check to include
>> getGeneric(genname)@default.
>>
>> This scenario is reproducible in the attached tarball
>>
>>    tar xzf PkgAB.tar.gz
>>    R CMD INSTALL PkgA
>>    R CMD check PkgB
>>
>> Martin Morgan
>>
>>
>> ______________________________________________
>> R-devel at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>


-- 
Computational Biology / Fred Hutchinson Cancer Research Center
1100 Fairview Ave. N.
PO Box 19024 Seattle, WA 98109

Location: Arnold Building M1 B861
Phone: (206) 667-2793



[Rd] namespace S3 and S4 generic imports cannot both be satisfied:
Martin Morgan