[Rd] S4 Generics and NAMESPACE : justified warning ?

Martin Maechler maechler at stat.math.ethz.ch
Mon Aug 31 14:51:16 CEST 2009


>>>>> "YC" == Yohan Chalabi <chalabi at phys.ethz.ch>
>>>>>     on Fri, 28 Aug 2009 16:24:29 +0200 writes:

    >>>>> "MM" == Martin Morgan <mtmorgan at fhcrc.org>
    >>>>> on Tue, 18 Aug 2009 06:15:50 -0700

    YC> Hi Martin,

    YC> Thanks for your response.

    MM> Commenting as a user, there's no guarantee that the
    MM> 'plot' generic defined in pkgA is derived from
    MM> graphics::plot via setGeneric; pkgA could define it's
    MM> own generic, and one would want to be informed of the
    MM> collision.

    YC> This shouldn't be a problem because generics keep track of the function
    YC> and package used.

    YC> setGeneric(plot)
    YC> str(getGeneric(plot))

yes, but you (Yohan) have provided a patch proposal which made
the warning go away in this one case, and
IIUC Martin Morgan argued that the warning was still needed because
of his case above.


     MM> Maintenance of packages that have used simple 'import'
     MM> to pull in all dependencies is tedious, but using
     MM> 'import' in some ways undermines benefits of name
     MM> spaces (restricting the symbol lookup table to reduce
     MM> the number of symbols and the possibility of name
     MM> collisions, and to more carefully isolate code inside
     MM> the package name space to changes in imported packages
     MM> or induced by the user). So I think a 'better practice'
     MM> is to explicitly import just those functions, classes,
     MM> etc that are required by the package. Maintenance of
     MM> such selective imports is much less tedious, even with
     MM> complicated package dependencies. There is an
     MM> unreleased Bioconductor package to identify specific
     MM> imports, available for R-2.9.* at
     MM>   [...............]

    YC> I agree with you that 'importFrom' should be the preferred approach. I
    YC> have been using it for some time and I have even wrote my own
    YC> functions to automatically generate the NAMESPACE. 


    YC> But the drawback is that it makes the dependency with other packages
    YC> version specific and can become tricky when one has several such
    YC> dependencies.

Yes. 

    YC> To make the maintenance of packages easier, I would like to use
    YC> the suboptimal 'import' so that I do not need to care about this
    YC> NAMESPACE/package version issue. But I cannot do that because of an,
    YC> IMO, unjustified warning.

Yes, I agree, unjustified in your case.
The question is: is there a patch which does differentiate
between your situation and Martin's scenario -- or does your
patch already do that?

Regards,
Martin Maechler, ETH Zurich



More information about the R-devel mailing list