[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