Michael Friendly
2013-Jan-16 16:25 UTC
[Rd] Declaring/importing non-exported functions [car] in another package
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? 2. Is my only alternative to copy these functions to my package, also unexported? thx, -Michael -- 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 [[alternative HTML version deleted]]
Duncan Murdoch
2013-Jan-16 16:40 UTC
[Rd] Declaring/importing non-exported functions [car] in another package
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