【问题标题】:Why does building an R package stop my code from working?为什么构建 R 包会阻止我的代码工作?
【发布时间】:2015-05-07 20:37:13
【问题描述】:

安装我的自定义 R 包代码后,它会停止工作吗?为什么?

详细来说,我有一个很小的 ​​R 包goEnrichment(点击查看 Github 存储库)。 R 包只包含两个函数和一些二进制数据。 在使用R CMD INSTALL goEnrichment 安装 R 包后,我还运行了两个测试 R 脚本。一个测试脚本失败,而另一个运行。

这两个脚本之间的唯一区别是,在工作版本中,我 require 是必要的库,source 是手动的函数文件,而在另一个失败的脚本中,我是 require 我的 goEnrichment 库。 请注意,这两个脚本都是直接从它们的目录goEnrichment/exec 启动的。

使用cd goEnrichment/exec && Rscript testGoEnrichment_works.R 开始工作测试。摘录:

# This is the WORKING version
require(GOstats)
require(GSEABase) 
require(RMySQL)
source( "../R/goEnrichment.R" )

使用cd goEnrichment/exec && Rscript testGoEnrichment_fail.R 启动失败测试脚本。摘录:

# This version FAILS
require(goEnrichment)

我得到的错误对我来说有些无意义: 'dimnames' applied to non-array.

built R 包在两个平台上失败,即在 Debian Wheezy 64R 3.0.2 和在 Mac OS X YosemiteR 3.1.1

我真的不知道为什么会这样。我使用Vim 检查了文件格式和意外字符。原因似乎也不是DESCRIPTION 文件,因为goEnrichment 所依赖的所有库都已导入。

有没有人知道是什么导致了这个非常奇怪的错误?非常感谢您的帮助。

【问题讨论】:

  • 您的 NAMESPACE 文件中没有导入的任何函数。这可能是原因。您正在使用 roxygen2,因此在您的函数中使用 packageName::function 应该在您记录/构建时将它们添加到 NAMESPACE。
  • 感谢泰勒的努力。不幸的是,这并没有成功,我改用packageName::function 在我的函数中,但仍然得到错误。顺便说一句,在R CMD INSTALL goEnrichment 之后,NAMESPACE 文件仍然没有改变。 - 有什么想法吗?
  • 您是否将更改推送到 GitHub?您是否重新运行 document 或者您曾经使用什么将 roxygen 输出转换为正确的文档?
  • 亲爱的 Tyler,对不起,我忘记推送到 Github。我现在已经做到了。我确实重新运行了roxygen2::roxygenise(),它没有触及NAMESPACE 文件。
  • 同时我发现,必须删除 NAMESPACE 文件才能让 Roxygen2 生成它。我这样做并添加了适当的importexport 字段。不幸的是,错误仍然存​​在。我把所有东西都推送到了 Github。你还有什么想法吗?

标签: r build package


【解决方案1】:

经过多次测试,我找到了问题的根源。

由于某种原因需要我的包时

require(goEnrichment)

通用函数

summary.GOHyperGResult

未加载,因为它应该加载。但是,当手动需要 goEnrichment 依赖的包时,该方法可用。至于为什么会这样,我没有时间去调查。我相信这里报告的错误与这个bug有关。

非常感谢 Tyler 的努力!

【讨论】:

    猜你喜欢
    • 2014-09-01
    • 1970-01-01
    • 2011-08-16
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-20
    相关资源
    最近更新 更多