From hb at biostat.ucsf.edu  Mon Aug 26 17:42:11 2013
From: hb at biostat.ucsf.edu (Henrik Bengtsson)
Date: Mon, 26 Aug 2013 08:42:11 -0700
Subject: [Rd] Correct NAMESPACE approach when writing an S3 method for a
 generic in another package
In-Reply-To: <1377505726.5290.20.camel@braque.iarc.fr>
References: <CAAHES9yT-YM=huPWJ+Wgv7y8RQV3n=hX8cHOMYXrCLNc7A4e4g@mail.gmail.com>
	<1377505726.5290.20.camel@braque.iarc.fr>
Message-ID: <CAFDcVCS0+qtPH3qBMOgouYhEg0-vzuh7xK7Y11GoMT+_C_1LxA@mail.gmail.com>

On Mon, Aug 26, 2013 at 1:28 AM, Martyn Plummer <plummerm at iarc.fr> wrote:
> I think rgl should be in Depends.  You are providing a method for a
> generic function from another package. In order to use your method, you
> want the user to be able to call the generic function without scoping
> (i.e. without calling rgl::plot3d), so the generic should be on the
> search path, so the package that provides it should be listed in Depends
> in the NAMESPACE file.

You can re-export an imported object, but it has to be done via an
explicit export(), cf. "It is possible to export variables from a
namespace which it has imported from other namespaces: this has to be
done explicitly and not via exportPattern" [Writing R Extensions].

/H

>
> Martyn
>
> On Fri, 2013-08-23 at 22:01 -0600, Gavin Simpson wrote:
>> Dear List,
>>
>> In one of my packages I have an S3 method for the plot3d generic
>> function from package rgl. I am trying to streamline my Depends
>> entries but don't know how to have
>>
>> plot3d(foo)
>>
>> in the examples section for the plot3d method in my package, without
>> rgl being in Depends.
>>
>> Note that I importFrom(rgl, plotd3d) and register my S3 method via
>> S3Method() in the NAMESPACE.
>>
>> If rgl is not in Depends but in Imports, I see this when checking the package
>>
>> > ## 3D plot of data with curve superimposed
>> > plot3d(aber.pc, abernethy2)
>> Error: could not find function "plot3d"
>>
>> I presume this is because rgl's namespace is only loaded but the
>> package is not attached to the search path.
>>
>> Writing R extensions indicates that one can export from a namespace
>> something that was imported from another package namespace. I thought
>> that might help the situation, and now the code doesn't raise an
>> error, I get
>>
>> * checking for missing documentation entries ... WARNING
>> Undocumented code objects:
>>   ?plot3d?
>> All user-level objects in a package should have documentation entries.
>> See the chapter ?Writing R documentation files? in the ?Writing R
>> Extensions? manual.
>>
>> as I don't document plot3d() itself.
>>
>> What is the recommended combination of Depends and Imports plus
>> NAMESPACE directives etc that one should use in this situation? Or am
>> I missing something else?
>>
>> I have a similar issue with my package including an S3 method for a
>> generic in the lattice package, so if possible I could get rid of both
>> of these from Depends if I can solve the above issue.
>>
>> Thanks in advance.
>>
>> Gavin
>>
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel



[Rd] Correct NAMESPACE approach when writing an S3 method for a generic in another package
Henrik Bengtsson