从命名空间调用函数
Posted
技术标签:
【中文标题】从命名空间调用函数【英文标题】:Calling a function from a namespace 【发布时间】:2011-01-11 01:00:52 【问题描述】:我正在尝试更改 R 包中一些命令的功能。很容易看到命令的来源。但是,该函数调用包命名空间中的其他函数。这些函数不是导出的对象。那么如何访问它们呢?
具体例子:
如何访问 copula::rmvdc 中使用的 asCall() 函数?
require(copula)
copula::rmvdc
getAnywhere("asCall")
所以 as.Call()
存在于 copula 包中,但我如何访问它?
> copula::asCall
Error: 'asCall' is not an exported object from 'namespace:copula'
【问题讨论】:
【参考方案1】:试试这个:
copula:::asCall
这是previously answered on R-help。该函数未在包命名空间中导出,因此您需要改用 :::
运算符。当函数不用于一般用途时(例如,在这种情况下您不需要记录它们),通常不会导出函数。
【讨论】:
我不敢相信...我尝试了 copula:asCall 然后 copula::asCall 然后说“well hellifiknow”【参考方案2】:开发时,?assignInNamespace非常有用。
这允许您将未导出函数的新副本注入包的命名空间。
如果 R 的错误信息更有帮助,那就太好了。而不是:
Error: 'matrixToPaths' is not an exported object from 'namespace:OpenMx'
为什么不添加:
You might try OpenMx:::matrixToPaths"
【讨论】:
"why not add ..." 因为你不应该访问包的私有对象。这就是为什么它们被称为“私人”。事实上,人们可能会问为什么:::
运算符甚至存在。
:::
允许您对使用内部对象的 pkg 函数进行修改,以满足您的需求。这不就是开源的精神吗?以上是关于从命名空间调用函数的主要内容,如果未能解决你的问题,请参考以下文章