如何列出R包中所有可用于rmarkdown::draft的R Markdown模板
解决方案
实现原理
R Markdown官方约定,所有R包提供的模板均存储在包安装路径的
rmarkdown/templates子目录下,每个合法模板对应一个独立子目录,且目录下必须包含template.yaml配置文件,子目录的名称就是可传入rmarkdown::draft的template_name参数合法取值。
通用实现代码
你可以直接使用以下自定义函数获取任意R包的所有合法R Markdown模板名称:
list_rmd_templates <- function(pkg) { # 定位包内的模板存储根路径 template_root <- system.file("rmarkdown", "templates", package = pkg) if (template_root == "") { warning(paste("包", pkg, "未提供任何R Markdown模板")) return(character(0)) } # 列出所有一级子目录,过滤掉无配置文件的非模板目录 all_subdirs <- list.dirs(template_root, full.names = TRUE, recursive = FALSE) valid_templates <- Filter(function(x) file.exists(file.path(x, "template.yaml")), all_subdirs) # 提取目录名作为模板名称返回 return(basename(valid_templates)) }
示例:获取reprex包的所有模板
直接将包名传入上述函数即可:
list_rmd_templates("reprex")
返回结果为两个模板名称,和RStudio GUI中展示的模板数量完全一致。
补充说明
- 拿到合法模板名后即可直接传入
rmarkdown::draft调用,示例如下:
rmarkdown::draft("my_reprex.Rmd", template = "reprex", package = "reprex")
- 该方法完全遵循rmarkdown官方的模板存储规范,适用于所有遵循规范开发的R包。
内容的提问来源于stack exchange,提问作者merv
相关产品推荐
相关产品推荐

