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

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.

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



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