如何使用R的ProjectTemplate自动加载lib子目录下的R脚本
ProjectTemplate 加载lib目录子文件夹R脚本解决方案
默认情况下ProjectTemplate::load.project()只会加载lib根目录下的R脚本,不会自动识别嵌套子目录内容,可通过以下两种方式解决:
方案1:开启内置递归加载配置(适用于0.10.2及以上版本)
- 打开项目根目录下
config/global.dcf配置文件 - 找到
recursive.lib配置项,将默认值off修改为on - 重新执行
ProjectTemplate::load.project()即可自动递归加载lib目录下所有层级子文件夹中的R脚本
方案2:自定义加载逻辑(兼容所有版本,支持灵活控制加载范围)
在lib根目录下新建一个R脚本(命名可自定义,例如load_subdir_scripts.R),lib根目录下的脚本会被load.project()优先执行,在该脚本中添加自定义加载代码即可:
# 递归检索lib下所有子目录中的.R脚本 subdir_rscripts <- list.files( path = "lib", pattern = "\\.R$", recursive = TRUE, full.names = TRUE ) # 排除lib根目录下的脚本,避免重复加载 root_rscripts <- list.files( path = "lib", pattern = "\\.R$", recursive = FALSE, full.names = TRUE ) subdir_rscripts <- setdiff(subdir_rscripts, root_rscripts) # 批量加载子目录脚本 lapply(subdir_rscripts, source)
如果不需要加载所有子目录,仅需加载指定子目录,可修改路径参数即可,例如仅加载lib/utils目录下的脚本:
list.files( path = file.path("lib", "utils"), pattern = "\\.R$", full.names = TRUE ) |> lapply(source)
注意事项
- 脚本加载顺序遵循文件名字典序,若子目录脚本存在依赖关系,可通过调整脚本文件名前缀控制加载顺序
- 自定义加载逻辑不会影响ProjectTemplate原有功能逻辑
内容的提问来源于stack exchange,提问作者Jeromy Anglim
相关产品推荐
相关产品推荐

