我有一个包的修订版,其中我添加了一些使用ggplot2包的绘图代码以及包大小的自定义比例。特别是,新代码有一行引用了scale包的形式:
trans = scales::trans_new("new scale", ...)
我发送包给Winbuilder进行检查,我收到此错误:
Error in loadNamespace(name) : there is no package called 'scales'
......如果我运行R CMD check --as-cran
,我确实得到了同样的错误
Suggests
文件中的尺度包含在DESCRIPTION
中;我对此进行了双重和三重检查。我在代码中也有几十次调用ggplot2::xxxx
例程,而ggplot2也在Suggests
中。没有错误。
我能做错什么?
我想出来了;它有点微妙(至少对像我这样的人来说)。
在我的包中的其他地方,我从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
检查中的那一点。