2010-01-29 74 views
26

我试图改变R中包中的几个命令的功能。查看命令的源代码很简单。但是该函数调用包名称空间中的其他函数。这些功能不是导出对象。那么我怎样才能访问它们?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' 

回答

61

试试这个:

copula:::asCall 

这是previously answered on R-help。该函数未在包名称空间中导出,因此您需要使用:::运算符。通常,功能在不用于一般用途时不会导出(例如,在这种情况下,您不需要记录它们)。

+12

我简直不敢相信......我试过系词:asCall然后系词:: asCall,然后说:“好hellifiknow” – 2010-01-29 21:50:42

13

开发时,? assignInNamespace非常有用。

这允许您将一个非导出函数的新副本注入到包的名称空间中。

这将是很好,如果R的错误信息更有帮助。相反的:

Error: 'matrixToPaths' is not an exported object from 'namespace:OpenMx' 

为什么不加:

You might try OpenMx:::matrixToPaths" 
+0

“为什么不添加...“,因为你不应该访问包的私有对象。这就是为什么他们被称为“私人”。事实上,人们可能会问为什么':::'运算符甚至存在。 – 2017-08-12 12:53:36

相关问题