从命名空间调用函数时找不到函数

时间:2016-11-27 02:34:54

标签: r namespaces

我有一个包含大量功能的R包(都是导出的)。其中一个函数在运行时在内部调用另一个函数。但是,当我通过命名空间运行此函数而不加载整个包时,它会抛出一个错误:'找不到函数..'

例如: foobar是两个功能。 foo在内部调用bar。但是当我通过命名空间调用foo时,mypackage::foo()会抛出错误could not find function "bar"。如果我先加载库并通过命名空间运行它可以正常运行。

#doesnot work
mypackage::foo()
could not find function "bar"
#works
library(mypackage)
mypackage::foo()

我已导出两个函数,两者都存在于NAMESPACE文件中。

1 个答案:

答案 0 :(得分:0)

使用:::::功能的问题是只有功能代码被拉入工作区。因此mypackage中的辅助或支持函数都没有被提取到解释器空间"中,即解释器可以看到的对象。所以你选择2"工作"而你的选择1失败了。对于我来说显而易见的原因。

当我攻击一个我知道的函数是从加载的命名空间派生的时候,我通常用以下内容完成黑客程序:

 environment(hacked_fun) <- environment(orig_fun)

但是当您使用&#34;多冒号函数&#34;从磁盘中提取代码时,这不是一个选项。这也是经验丰富的R程序员在包中进行开发的一个主要原因。制作包的编码规则也支持定义包依赖。