使用 'require' 包代码在 R 中即时获取数据包
Using 'require' package code to obtain datapackages on the fly in R
我正在编写一个使用各种生物导体注释数据包的 R 包。具体数据包因用例而异。因此,我有一个函数可以做这样的事情:
if (!require(biocpack_name, character.only=T)) {
source("https://bioconductor.org/biocLite.R")
BiocInstaller::biocLite(biocpack_name)
require(biocpack_name , character.only=T)
}
biocpack_name 可以是根据正在分析的特定数据查找的 ~30 多个注释数据包中的几个。因此,我不想将每个都添加到 'Suggests'(我什至不确定这是否有效,因为错误不是针对包,而是针对指定包的字符串)。 R CMD CHK 给我这个错误:
'library' or 'require' call not declared from: ‘biocpack_name’
'library' or 'require' call to ‘biocpack_name’ in package code.
我该如何解决这个问题?
这不是错误,而是警告。如果你使用 character.only = TRUE
而不是 T
它就会消失(我猜是因为 TRUE 的值是已知的并且不能被重新分配,但是 T 是未知的并且可以是任何东西,包括 FALSE)。但另外请遵循警告中的建议使用 requireNamespace()
(并且不要污染用户搜索路径);也许 db = get(biocpack_name, getNamespace(biocpack_name))
将允许您按照自己喜欢的方式使用注释包,例如 mapIds(db, ...)
.
如果有人学究气,将包添加到描述文件的 Enhances: 字段会表明您的包以某种方式与注释包一起工作,但不会导致包的安装(例如,用于构建小插图) 除非明确要求。
我正在编写一个使用各种生物导体注释数据包的 R 包。具体数据包因用例而异。因此,我有一个函数可以做这样的事情:
if (!require(biocpack_name, character.only=T)) {
source("https://bioconductor.org/biocLite.R")
BiocInstaller::biocLite(biocpack_name)
require(biocpack_name , character.only=T)
}
biocpack_name 可以是根据正在分析的特定数据查找的 ~30 多个注释数据包中的几个。因此,我不想将每个都添加到 'Suggests'(我什至不确定这是否有效,因为错误不是针对包,而是针对指定包的字符串)。 R CMD CHK 给我这个错误:
'library' or 'require' call not declared from: ‘biocpack_name’
'library' or 'require' call to ‘biocpack_name’ in package code.
我该如何解决这个问题?
这不是错误,而是警告。如果你使用 character.only = TRUE
而不是 T
它就会消失(我猜是因为 TRUE 的值是已知的并且不能被重新分配,但是 T 是未知的并且可以是任何东西,包括 FALSE)。但另外请遵循警告中的建议使用 requireNamespace()
(并且不要污染用户搜索路径);也许 db = get(biocpack_name, getNamespace(biocpack_name))
将允许您按照自己喜欢的方式使用注释包,例如 mapIds(db, ...)
.
如果有人学究气,将包添加到描述文件的 Enhances: 字段会表明您的包以某种方式与注释包一起工作,但不会导致包的安装(例如,用于构建小插图) 除非明确要求。