R包开发疑问:仅在示例/vignette中调用的包应放Imports还是Suggests?
解决R包示例/vignette依赖STexampleData的问题
- 首先明确:你的场景下不需要把STexampleData放在Imports里,更不用声明
@import,正确的做法是把它移到Suggests字段,同时对示例代码做简单适配。
具体操作步骤:
- 修改DESCRIPTION文件:把
STexampleData从Imports移到Suggests,这样它就变成可选依赖,不会强制要求用户安装才能用你的包。 - 适配@examples代码:因为示例是可选运行的,要加个条件判断,避免没装依赖时报错:
if (requireNamespace("STexampleData", quietly = TRUE)) { library(STexampleData) spe <- Visium_humanDLPFC() # 这里写你的后续示例逻辑 }
- 如果涉及vignette:只要
Suggests里有STexampleData,vignette里可以正常用library(STexampleData),跑R CMD check时如果要执行vignette内容,记得加上--install-args=--build参数(或者用devtools的check(vignettes = TRUE)),会自动安装Suggests里的依赖。
为什么之前报错?
你把它放在Imports里,R就默认它是包运行必需的依赖,这时候必须在NAMESPACE里通过@import或@importFrom声明导入,否则check会报错。但你的场景只是用在示例和vignette,完全没必要设为强制依赖,用Suggests才是符合CRAN规范的做法。
内容的提问来源于stack exchange,提问作者ZheFrench
相关产品推荐
相关产品推荐

