From jfox at mcmaster.ca  Wed Jan 16 18:26:52 2013
From: jfox at mcmaster.ca (John Fox)
Date: Wed, 16 Jan 2013 12:26:52 -0500
Subject: [Rd] Declaring/importing non-exported functions [car] in
	another package
In-Reply-To: <50F6D805.1020309@gmail.com>
References: <50F6D469.3010305@yorku.ca>
 <50F6D805.1020309@gmail.com>
Message-ID: <web-440510245@cgpsrv2.cis.mcmaster.ca>

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.

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



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