R包:"错误:对象'计算'在加载命名空间时找不到。"

时间:2018-04-16 13:59:34

标签: r r-package r-devtools

我的目录结构如下:

c:/Users/bob/MyPackageName
c:/Users/bob/MyPackageName/R
c:/Users/bob/MyPackageName/tests
c:/Users/bob/MyPackageName/tests/testthat

我的开发会话通常包括在包根目录(c:/Users/bob/MyPackageName)中启动R会话,并运行

devtools::load_all()
devtools::test()

然后在MyPackageName/tests/testthat/mytest.RMyPackageName/R/mycode.R中添加少量位。

开始会话时返回

Loading MyPackageName
Error: object 'compute' not found whilst loading namespace 'MyPackageName'

我试试:

  1. 致电explicit devtools::load_all("c:/Users/bob/MyPackageName")
  2. 搜索compute的错误实例(需要包,函数名,任何内容..)。但一切都很好。
  3. Clearing一些缓存,rm(list=ls())
  4. devtools::load_all()中的会话和c:/Users/bob/MyPackageName/tests/testthat中的其他会话中调用本地化的c:/Users/bob/MyPackageName/tests/testthat
  5. 通过devtools::document()重新生成文档,以免其中的某些内容出现问题。
  6. 删除MyPackageName/.RDataMyPackageName/.Rhistory
  7. 但没有。我仍然得到Error: object 'compute' not found whilst loading namespace 'MyPackageName'

    我还能尝试什么?例如,什么是预装Devtools方法"加载所有"?什么是"对象'计算'"?

    当我在包目录之外启动R会话时,一切都很顺利。因此我的R设置很好;这个问题是在写一个R包的背景下。

2 个答案:

答案 0 :(得分:0)

这可能是一种解决方法。也许你可以尝试一下。

我在重建软件包时遇到了类似的错误Error: object 'compute' not found whilst ...(R版本3.5.0,roxygen2版本3.5.0)。

我最后手动移除S3method(compute,...)中的第一行NAMESPACE以重新打包。

答案 1 :(得分:0)

不看函数名很难判断,但这可能是一个问题,因为 ROxygen >3 现在对 S3 对象和函数都使用 tkinter。因此,如果您有一个使用点的函数,例如@export 并且您使用 Roxygen 的 compute.something.cool(),它可能会推断它是 S3 对象而不是函数。

更详细地描述了这一点here,但简而言之,使用导出调用明确命名您的函数:

#' @export

这种方法意味着您仍然可以使用 #' @export compute.something.cool 来保持您的 NAMESPACE 更新,而无需手动执行此操作。请注意,Bioconductor 不允许包使用点命名约定,可能正是出于这个原因,因此将来可能值得避免这种情况。