检查错误--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 之间的差异

springboot启动报错可以测试吗

ReactNative常见报错

webstorm检查总是一大堆错误,看图

解决docker容器因报错无法启动的问题,检查修复容器错误并重启

浅谈php错误提示及查错方法