1

几天前,我在 Ubuntu 12.04 上升级到 R 3.0.1,但似乎没有任何效果...... :( 最烦人的是,在我在 R 3.0.1 下编译我的包之后,包中的函数就不存在了更多(就像它们没有被导出一样)。这一切都在 R 2.15.3 及之前工作......

我在这里创建了一个非常简单的可重现示例https://github.com/SamoPP/packageTest。如果您构建包并使用 require(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 文件中的所有函数,这在 R 3.0.1 之前是默认行为吗?

我在这里想念什么?

我希望消息不是:您需要在 R 版本 3.0 之后显式导出包中的所有函数......因为这意味着我可以写一两个星期的导出......我希望有一个解决方法。

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

编辑:更改 NAMESPACE 文件以添加“常规”(导出不以点开头的所有内容)导出模式

exportPattern("^[^\\.]")

为我解决了这个问题,因为我没有时间为我要导出的每个函数显式编写导出。直到下一次改变...... :)

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

4

1 回答 1

3

您的NAMESPACE文件不会导出任何内容。只有在NAMESPACEdo 中导出的函数才可见。请参阅编写 R 扩展中有关名称空间的部分

如果您希望您的功能可见,请将以下内容放入NAMESPACE文件中:

export(printTestPackage)

事实上,NAMESPACE在 R 3.0 中并没有引入通过显式导出函数的需要,但更早的时候,我猜至少是 R 2.15 或更确切地说是 R 2.14。

于 2013-06-25T12:20:48.487 回答