检查错误--as-cran“没有名为...的包”
Posted
技术标签:
【中文标题】检查错误--as-cran“没有名为...的包”【英文标题】:Error in check --as-cran "there is no package called ..." 【发布时间】:2019-04-16 00:30:34 【问题描述】:我有一个包的修订版,其中我添加了一些使用 ggplot2 包的绘图代码以及来自包 scales 的自定义比例。特别是,新代码有一行引用 scales 包,格式为:
trans = scales::trans_new("new scale", ...)
我将包发送到 Winbuilder 进行检查,我收到此错误:
Error in loadNamespace(name) : there is no package called 'scales'
...如果我运行R CMD check --as-cran
,确实会遇到同样的错误
是的,scales 已安装在我的系统上。
是的,scales 包含在我的Suggests
文件中的DESCRIPTION
中;一世
对此进行了双重和三重检查。
是的,scales 似乎是 CRAN 上仍然可用的一个包,具有大量反向依赖项。
我的代码中还有几十个对ggplot2::xxxx
例程的调用,ggplot2 也在Suggests
中。那里没有错误。
我做错了什么?
【问题讨论】:
ggplot2 不在 Depends 中,我以同样的方式多次使用ggplot2::
。我绝对不想在 Depends 中添加额外的东西。
如果你有几十个调用某个东西,那么你的包显然依赖于它。当您的用户点击这些引用时会发生什么?
我有一张requireNamespace()
支票伴随他们。我想到了。看我的回答...
@Elin 进一步考虑这一点,我会说除非用户确实需要在搜索路径中使用该包,否则不应在 Depends 中放置任何内容。对于需要完成包的中心目的的包,它们应该放在 Imports 中。在这种情况下,我的包的用户可能永远不会使用它的任何绘图功能,所以我将 ggplot2 放入 Suggests 并进行命名空间检查。我认为过度依赖是 R 包的一个真正问题。许多有数百个依赖项,这就是需要加载到内存中的所有内容。
【参考方案1】:
我想通了;这有点微妙(至少对像我这样的人来说)。
在我的包的其他地方,我从Suggests
的包中调用函数,我还有一行代码如下所示:
if (!requireNamespace("ggplot2", quietly = TRUE))
stop ("The 'ggplot2' package is not installed installed.", call. = FALSE)
... code that calls ggplot2:: functions
这里的问题是 (a) 我没有对scales
进行这样的检查;但更重要的是,(b) 上面的分配,trans = scales::...
在我的包的命名空间中。
所以我所做的是将trans
的赋值移动到使用它的函数内部,并在它之前进行requireNamespace()
与上述类似的测试。现在我的包裹检查至少在--as-cran
检查中通过了这一点。
【讨论】:
以上是关于检查错误--as-cran“没有名为...的包”的主要内容,如果未能解决你的问题,请参考以下文章
CRAN 包检查和 R CMD 检查-as--cran 之间的差异