我的目录结构如下:
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'
我试试:
devtools::load_all("c:/Users/bob/MyPackageName")
compute
的错误实例(需要包,函数名,任何内容..)。但一切都很好。rm(list=ls())
。devtools::load_all()
中的会话和c:/Users/bob/MyPackageName/tests/testthat
中的其他会话中调用本地化的c:/Users/bob/MyPackageName/tests/testthat
。devtools::document()
重新生成文档,以免其中的某些内容出现问题。MyPackageName/.RData
和MyPackageName/.Rhistory
。但没有。我仍然得到Error: object 'compute' not found whilst loading namespace 'MyPackageName'
我还能尝试什么?例如,什么是预装Devtools方法"加载所有"?什么是"对象'计算'"?
当我在包目录之外启动R会话时,一切都很顺利。因此我的R设置很好;这个问题是在写一个R包的背景下。
答案 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 不允许包使用点命名约定,可能正是出于这个原因,因此将来可能值得避免这种情况。