1

我的目录结构如下:

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.R然后在和 中交替添加小位MyPackageName/R/mycode.R

开始会话时返回

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

我尝试:

  1. 调用显式 devtools::load_all("c:/Users/bob/MyPackageName")
  2. 搜索compute(所需的包、函数名、任何东西......)的错误实例。但一切都很好。
  3. 清除一些缓存,rm(list=ls()).
  4. devtools::load_all()从一个会话调用一个本地化的 inc:/Users/bob/MyPackageName/tests/testthat和另一个 in c:/Users/bob/MyPackageName/tests/testthat
  5. 通过 重新生成文档devtools::document(),以免其中一些损坏出错。
  6. 删除MyPackageName/.RDataMyPackageName/.Rhistory

但什么都没有。我仍然得到Error: object 'compute' not found whilst loading namespace 'MyPackageName'

我还能尝试什么?比如什么是pre-Devtools的“全部加载”的方法?什么是“对象'计算'”?

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

4

2 回答 2

3

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

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

我最终手动删除了第一行S3method(compute,...)NAMESPACE重建包。

于 2018-05-24T13:50:22.163 回答
0

没有看到函数名称就很难判断,但这可能是一个问题,因为 ROxygen >3 现在@export用于 S3 对象和函数。因此,如果你有一个使用点的函数,例如compute.something.cool()你使用 ROxygen 的#' @export,它可能会推断它是一个 S3 对象而不是一个函数。

这在此处进行了更详细的描述,但简而言之,使用导出调用明确命名您的函数:

#' @export compute.something.cool

这种方法意味着您仍然可以使用devtools::document()来保持您的 NAMESPACE 更新,而无需手动执行。请注意,Bioconductor不允许包使用点命名约定,可能正是出于这个原因,因此将来可能值得避免这种情况。

于 2021-07-15T13:41:06.917 回答