[Rd] (no subject)

Henrik Bengtsson hb at biostat.ucsf.edu
Sat Sep 21 19:47:53 CEST 2013


Hi, it appears that you've lost the original thread

R-devel thread '"False" warning on "replacing previous import" when
re-exporting identical object' started on 2013-08-29
[https://stat.ethz.ch/pipermail/r-devel/2013-August/067321.html].

(and forgot the subject line), so in order to not start yet another
thread I'll close this one and reply/cc you there.

/Henrik


On Sat, Sep 21, 2013 at 9:44 AM, Ben Bolker <bbolker at gmail.com> wrote:
> Henrik Bengtsson <hb <at> biostat.ucsf.edu> writes:
>
>>
>> On Fri, Aug 30, 2013 at 11:51 AM, Henrik Bengtsson
>> <hb <at> biostat.ucsf.edu> wrote:
>> > Hi.
>
> [snip]
>
>   Bump ... Henrik, did you ever post this as a request/wishlist at
> https://bugs.r-project.org/bugzilla3/ ?  (I don't think so, I couldn't
> find it there, but maybe I wasn't looking in the right place.) I
> would be curious to know what the response was from R-Core, because
> these kinds of warnings are starting to pop up in the nlme/lme4/
> downstream package complex.  In particular,
>
> VarCorr
> fixef
> lmList
> ranef
>
> are defined by nlme, imported and re-exported by lme4.  This doesn't
> seem to make any trouble for lme4, but it does cause problems for
> some of the downstream packages (such as GRRGI:
> [broken URL for Gmane]
> http://www.r-project.org/nosvn/R.check/
>  r-devel-linux-x86_64-fedora-gcc/GRRGI-00check.html )
>
> (Right now GRRGI uses a pretty crude import-all strategy:
> import(nlme,lme4,...); exportPattern("."); which might be
> tweaked, but I think the issue is still worth resolving.)
>
>   In a perfect world, I guess some of these generics would be moved
> upstream to a package that both nlme and lme4 could import from,
> but that seems tricky to do without making fairly major architectural
> changes.
>
>   Ben Bolker
>
>
>> > For the record, you're referring to R-devel thread 'Correct NAMESPACE
>> > approach when writing an S3 method for a generic in another package'
>> > started on Aug 24, 2013
>> > [https://stat.ethz.ch/pipermail/r-devel/2013-August/067221.html].
>> > Yes, it's closely related or possibly the same issue.  However, I do
>> > not find it odd that the S3 generic function needs to be exported
>> > from/available via the namespace.  Hence it needs to be export():ed by
>> > at least one package/namespace.
>> >
>> > The real issue is when two package needs to export a generic function
>> > with the same name, e.g. foo().   If the two generic functions are
>> > defined differently (e.g. different arguments/signatures), they will
>> > be in conflict with each other.  If they are identical, this should
>> > not be a problem, but here I might be wrong.  However, there is also
>> > the special case where one package reexports the generic function from
>> > another package, e.g. PkgB::foo() exports PkgA:foo().  In this case,
>> > the object 'foo' does actually not existing in the name space of
>> > package PkgB - instead it provides a "redirect" to it, e.g.
>> >
>> >> PkgA::foo
>> > function (...)
>> > UseMethod("foo")
>> > <environment: namespace:PkgA>
>> >
>> >> PkgB::foo
>> > function (...)
>> > UseMethod("foo")
>> > <environment: namespace:PkgA>
>> >
>> >> exists("foo", envir=getNamespace("PkgB"), inherits=FALSE)
>> > [1] FALSE
>> >
>> >> exists("foo", envir=getNamespace("PkgB"), inherits=TRUE)
>> > [1] TRUE
>> >
>> >> identical(PkgB::foo, PkgA::foo)
>> > [1] TRUE
>> >
>> >
>> > The warning on "replacing previous import by 'PkgA::foo' when loading
>> > 'PkgC'" that occurs due to import(PkgA, PkgB) is generated in
>> > base::namespaceImportFrom()
>> > [http://svn.r-project.org/R/trunk/src/library/base/R/namespace.R]
>
>> > Note how there is already code for avoiding "false" warnings on S4
>> > generic function.  This is what we'd like to have also for S3 generic
>> > functions, but it's much harder to test for such since they're not
>> > formally defined.  However, I'd argue that it is safe to skip the
>> > warning *when the variable to be imported does not actually exist in
>> > the package being imported* (e.g. when just rexported), i.e.
>> >
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel



More information about the R-devel mailing list