[Rd] Declaring/importing non-exported functions [car] in another package

Martin Maechler maechler at stat.math.ethz.ch
Thu Jan 17 14:37:47 CET 2013

>>>>> Michael Friendly <friendly at yorku.ca>
>>>>>     on Wed, 16 Jan 2013 12:52:15 -0500 writes:

    > On 1/16/2013 12:26 PM, John Fox wrote:
    >> Dear Duncan and Michael,
    >> My initial reaction is that I'd rather not export these
    >> functions from the car package since the package already
    >> has many exported functions and the functions in question
    >> perform low-level operations that won't be of interest to
    >> end users. I recognize, however, the functions (and
    >> possibly some others) may be useful in other packages,
    >> such as heplots, so I'll think about this some more.

    > This is why I wrote directly to R-devel rather than to
    > you.  It is low-level, and doesn't need to be exported.
    > OTOH, it provides an elegant way to provide Sheffe-type
    > intervals & ellipses as you do in car::confidenceEllipse,
    > which I copied.

If it provides an elegant way to something that is useful to
other useRs, it should be exported, ideally.

Consequently, if the author is willing to document and support
it, I'd strongly suggest it be exported.


    > best, -Michael

    >> Following up on Michael's subsequent message in this
    >> thread, I find the current text in Sec. 1.6.1
    >> ("Specifying imports and exports") of Writing R
    >> Extensions reasonably clear.
    >> Best, John
    >> On Wed, 16 Jan 2013 11:40:37 -0500 Duncan Murdoch
    >> <murdoch.duncan at gmail.com> wrote:
    >>> On 13-01-16 11:25 AM, Michael Friendly wrote:
    >>>> A new function in my heplots package wants to use a
    >>>> non-exported utility function in the car package,
    >>>> df.terms, but this depends on other non-exported
    >>>> functions.  From the Writing R extensions manual, I
    >>>> thought I could do this via (in my NAMESPACE)
    >>>> importFrom(car, car:::df.terms, car:::df.terms.default,
    >>>> car:::is.aliased)
    >>>> but I get: ** preparing package for lazy loading Error
    >>>> : objects 'car:::df.terms', 'car:::df.terms.default',
    >>>> 'car:::is.aliased' are not exported by 'namespace:car'
    >>>> ERROR: lazy loading failed for package 'heplots'
    >>>> \S 1.6.1 of the manual says regarding importFrom():
    >>>> Using |foo:::f| instead of |foo::f| allows access to
    >>>> unexported objects.  This is generally not recommended,
    >>>> as the semantics of unexported objects may be changed
    >>>> by the package author in routine maintenance.
    >>>> Questions: 1.  Why doesn't this work?
    >>> I think you misread the manual.  It is talking about
    >>> ways to access functions other than by using importFrom.
    >>> You can use car:::df.terms in your functions.
    >>>> 2.  Is my only alternative to copy these functions to
    >>>> my package, also unexported?
    >>> Using car:::df.terms explicitly is another option.
    >>> Another possibility is for the car maintainer (John Fox)
    >>> to export that function from car.
    >>> Duncan Murdoch

    > -- 
    > Michael Friendly Email: friendly AT yorku DOT ca
    > Professor, Psychology Dept. & Chair, Quantitative Methods
    > York University Voice: 416 736-2100 x66249 Fax: 416
    > 736-5814 4700 Keele Street Web: http://www.datavis.ca
    > Toronto, ONT M3J 1P3 CANADA

    > ______________________________________________
    > R-devel at r-project.org mailing list
    > https://stat.ethz.ch/mailman/listinfo/r-devel

More information about the R-devel mailing list