R包inst目录复杂文件结构问题:R CMD CHECK误删非空目录
解决R CMD CHECK误删inst下嵌套目录的问题
核心原因
R CMD CHECK在临时构建包的过程中,若无法检测到目录内存在被有效引用的文件,会误将实际非空的嵌套目录判定为空并删除,导致后续代码加载失败。
解决方案
1. 修正文件路径引用(根本解决)
不要直接使用本地相对路径(如file.path("inst", "lexicons", "com", ...)),改用R包标准的system.file()函数获取安装后文件的正确路径,确保包在构建、检查、安装全流程中都能准确定位文件:
load_schema <- function(schema_name) { schema_path <- system.file("lexicons", "com", paste0(schema_name, ".json"), package = "blueRsky") if (schema_path == "") { stop("目标Schema文件未找到") } jsonlite::read_json(schema_path) }
修正后,R CMD CHECK能检测到目录内的文件被实际调用,不会误判目录为空。
2. 添加占位文件(兜底方案)
如果路径修正后仍存在问题,可在inst/lexicons/com目录下添加一个空的占位文件(比如命名为.keep)。这个空文件会让R明确识别到目录非空,避免被判定为无用目录删除。注意不要用.gitkeep,R构建工具默认会忽略Git相关隐藏文件。
3. 调整检查参数(临时应急)
运行R CMD CHECK时添加--no-clean参数,阻止检查过程清理临时构建目录:
R CMD CHECK --no-clean blueRsky
此方法仅作为临时应急手段,无法从根本上解决包的路径逻辑问题,不推荐长期使用。
其他排查方向
- 检查
DESCRIPTION文件的LazyData设置,若设为false可能影响非R格式数据文件的加载,可尝试改为LazyData: true。 - 确认所有JSON lexicon文件未被
.Rbuildignore或.Rinstignore规则排除,确保它们能被正常包含到构建的包中。
内容的提问来源于stack exchange,提问作者crf
相关产品推荐
相关产品推荐

