[R] How to export a function from a package and access it only by specifying the namespace?

Sharpie chuck at sharpsteen.net
Wed Dec 2 06:27:01 CET 2009



Peng Yu wrote:
> 
> Then I try the package 'try.package' in an R session. I'm wondering
> why neither 'my_test_f' and 'try.package::my_test_f' work. 
> 

The error message you got below clearly explains this-- you did not export
my_test_f in your NAMESPACE file.  To access unexported functions, you must
use the ':::' operator:

  try.package:::my_test_f()



Peng Yu wrote:
> 
> Why 'my_test_g' can be accessed with 'try.package::' and without
> 'try.package::'?
> 

Because you exported it in the NAMESPACE file.



Peng Yu wrote:
> 
> Is there a way to make  'my_test_g' accessible only by specifying the
> namespace 'try.package::'?
> 

No.

The purpose of the '::' operator is for those cases where multiple packages
are loaded that each export a function with the same name.  This is known as
"masking" and the last loaded package will contribute the dominant
function-- i.e. the function the gets called when the user types
"functionName()" and not "packageName::functionName()".  The "::" operator
allows the selection of functions that are masked by the dominant function.

If you really want to conceal a function from user-level code, don't export
it and it will only be accessible via the ":::" operator.



Peng Yu wrote:
> 
>> library(try.package)
>> try.package::my_test_g
> function ()
> {
>     print("Helloggg")
> }
> <environment: namespace:try.package>
>> my_test_g
> function ()
> {
>     print("Helloggg")
> }
> <environment: namespace:try.package>
>> my_test_f
> Error: object "my_test_f" not found
>> try.package::my_test_f
> Error: 'my_test_f' is not an exported object from 'namespace:try.package'
> 
-- 
View this message in context: http://n4.nabble.com/How-to-export-a-function-from-a-package-and-access-it-only-by-specifying-the-namespace-tp932776p932798.html
Sent from the R help mailing list archive at Nabble.com.




More information about the R-help mailing list