【问题标题】:In R 3.0.1 functions in package not available any more在 R 3.0.1 中,包中的函数不再可用
【发布时间】:2013-06-25 11:53:20
【问题描述】:

几天前我在 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("^[^\\.]")

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

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

【问题讨论】:

    标签: r


    【解决方案1】:

    您的 NAMESPACE 文件不会导出任何内容。只有在NAMESPACE 中导出的函数才会变得可见。请参阅section on namespaces in Writing R extension

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

    export(printTestPackage)
    

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

    【讨论】:

    • 感谢您的回答。嗯,是的,NAMESPACE 是引入的,但我猜在以前的版本中不是强制性的。不幸的是,我在这么多的包中创建了这么多的函数,我无法使用“export(functionName)”一一明确地导出它们......寻找解决方法。在查看文档时发现了一个。
    • 谢谢。好吧,可能是这样,但我的设置仅在升级到 R 3.0.1 后才停止工作。官方文档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,您可以通过将其放入您的NAMESPACE 来导出所有内容:exportPattern("^[[:alpha:]]+")(如果您使用package.skeleton() 创建包,这是默认的命名空间)。
    • @GSee 谢谢。再来一次。这真的让一切恢复到工作状态。
    猜你喜欢
    • 2022-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-30
    • 2014-06-14
    • 1970-01-01
    • 2013-08-11
    • 2013-06-17
    相关资源
    最近更新 更多