2013-06-25 38 views
1

我升级至R 3.0.1在Ubuntu 12.04,前几天和似乎没有任何工作任何更多... :(最讨厌的事情是,经过我编译我在R程序包在包3.0.1函数只是不存在了(就像他们不出口),这所有的工作中的R 2.15.3和前...就R 3.0.1功能更多

我创建了一个非常简单的重复的例子, 。这里https://github.com/SamoPP/packageTest如果你建立包,将其使用要求(packageTest)加载,你不能使用它的简单函数...

的问题是:

> require(packageTest) 
.... 
> printTestPackage() 
Error: could not find function "printTestPackage" 
> packageTest::printTestPackage() 
Error: 'printTestPackage' is not an exported object from 'namespace:packageTest' 
> packageTest:::printTestPackage() 
[1] "Testing!!! And it works." 

如何说服[R 3.0.1自动导出在./R/文件夹什么曾经为R 3.0.1之前的默认行为的所有* .R文件中的所有功能?

我在这里错过了什么?

我希望消息是不是:你需要明确导出所有功能包 - [R版本3.0以后......因为这意味着我可以写为出口一两个星期......我希望有一个解决方法。

感谢任何建议/提示/修复/ ...

编辑: 以这样的方式改变空间文件通过

添加“一般”(出口一切不以点开头)出口格局
exportPattern("^[^\\.]") 

解决了我的问题,因为我没有时间去明确写入出口为每一个功能我要出口。直到下次改变.... :)

还在寻找更优雅/“正确的方式”解决方案......

回答

3

NAMESPACE文件没有任何出口。只有NAMESPACE中导出的功能确实可见。请参阅section on namespaces in Writing R extension

如果你希望你的函数是可见的,放在NAMESPACE文件中的以下内容:

export(printTestPackage) 

事实上,通过NAMESPACE显式导出功能,需要在R 3.0没有出台,但早些时候,我猜至少R 2.15或者R 2.14。

+0

感谢您的回答。那么,是的,NAMESPACE已经推出了,但我认为在以前的版本中并不强制。不幸的是,我在这么多的包中创建了这么多的函数,我不能使用“export(functionName)”一个接一个地显式导出它们......寻找解决方法。有人发现看文档。 – Samo

+0

它在R'2.15'中是强制性的。我很确定。 – Henrik

+0

谢谢。那么可能是这种情况,但是我的设置只有在升级到R 3.0.1之后才会停止工作。这里的官方文档http://cran.r-project.org/doc/manuals/R-exts.html#Package-namespaces表示,“在R 2.14.0之前,命名空间在软件包中是可选的:在默认命名空间上生成安装在2.14.x和2.15.x中。从3.0.0开始,命名空间是强制性的。“ – Samo