假设一个 R 包 ( myPackage )通过 DESCRIPTION 文件和 NAMESPACE 文件导入 R 包RCircos 。
$ cat DESCRIPTION
Package: myPackage
Imports: RCircos (>= 1.2.0)
...
$ cat NAMESPACE
import(RCircos)
...
RCircos的好处之一是它定义了一个自定义环境(称为RCircos.Env)并从它的各种函数读取/写入该环境的变量。例如,函数RCircos.Initialize.Plot.Parameters读取和写入此环境。
...
RCircosEnvironment <- NULL;
RCircosEnvironment <- get("RCircos.Env", envir = globalenv());
RCircosEnvironment[["RCircos.PlotPar"]] <- plot.param;
(这种特殊的行为也被其他 R 包所识别;例如,参见这个包的第 247-249 行)。
不幸的是,当我通过DESCRIPTION文件和NAMESPACE文件简单地导入RCircos时,似乎在myPackage中无法识别环境RCircos.Env 。
那么可以做些什么呢?
似乎有两种选择可以使环境RCircos.Env可供RCircos.Initialize.Plot.Parameters
. 但是,这两个选项都会导致 CRAN 检查 ( )在提交给 CRAN 之前对myPackageR CMD check myPackage --as-cran
进行强制评估期间发出警告或注释,从而阻止其在 CRAN 上的接受。
选项 1:我在要求对象的函数之前直接包含以下行:
# my code here #
assign("RCircos.Env", RCircos::RCircos.Env, .GlobalEnv)
RCircos.Set.Core.Components(...)
# my code here #
但是,CRAN 检查会用一个 NOTE 突出显示这一行,从而阻止myPackage在 CRAN 上的接受。
* checking R code for possible problems ... NOTE
Found the following assignments to the global environment:
File ‘PACViR/R/visualizeWithRCircos.R’:
assign("RCircos.Env", RCircos::RCircos.Env, .GlobalEnv)
选项 2 :我在要求对象的函数之前加载整个RCircos库:
# my code here #
library(RCircos)
RCircos.Set.Core.Components(...)
# my code here #
但是,CRAN 检查通过警告突出显示此选项,再次阻止myPackage在 CRAN 上的接受。
* checking dependencies in R code ... WARNING
'library' or 'require' call not declared from: ‘RCircos’
'library' or 'require' call to ‘RCircos’ in package code.
Please use :: or requireNamespace() instead.
See section 'Suggested packages' in the 'Writing R Extensions' manual.
当然,必须有一种简单且与 CRAN 兼容的方法来使环境RCircos.Env可访问诸如RCircos.Set.Core.Components
myPackage 之类的函数!有人可以命名并解释这种方式吗?