R包data-raw目录预处理脚本未执行问题排查
问题诊断与解决方案
核心误解:data-raw 目录脚本不会自动执行
你之前的认知有误——data-raw 目录下的脚本并非包构建/安装过程中自动运行的。这个目录的设计只是用来存放数据集的预处理代码,方便开发者维护数据生成逻辑,需要你手动执行脚本,将处理好的数据集保存到 data/ 目录(格式为 .rda 或 .rdata),才能让包的使用者通过 data() 加载。
目标包的具体问题
查看你测试的 ces 包仓库:
data/目录是空的,没有预先生成的df.rda(或类似)文件,所以安装后自然找不到该数据集data-raw/里的脚本没有被执行过,也就没有生成可供加载的数据集文件
R CMD check 无报错的原因
R CMD check 只会验证包的结构合法性、代码语法、文档一致性等,不会检查 data/ 目录是否存在数据集——只要你没有在包的文档(比如 DESCRIPTION 或帮助文档)中声明存在某个数据集,check 就不会报错。
修复步骤
- 手动执行 data-raw 脚本:
打开包项目,运行data-raw/下的预处理脚本,将处理后的df对象保存到data/目录:# 在脚本末尾添加保存代码 usethis::use_data(df, overwrite = TRUE) # 或手动保存 save(df, file = "data/df.rda") - 添加数据集文档:
用 roxygen2 为数据集编写帮助文档(比如在R/data.R中):#' 示例数据集 #' #' 这是 ces 包的示例数据集 df #' #' @format 一个数据框,包含 X 行 Y 列 #' @source 数据来源说明 "df" - 重新构建并安装包:
之后再运行devtools::document() devtools::install() # 或用 R CMD build/R CMD installlibrary(ces); data(df)就能正常加载数据了。
内容的提问来源于stack exchange,提问作者spindoctor
相关产品推荐
相关产品推荐

