开发R包时,rmd文件的合适存放目录及无system.file()调用方案咨询
解决方案
首先,你需要把sample.rmd放在R包的**inst/目录**下,这是R包存放额外资源文件的标准位置,包安装后该目录下的文件会被完整保留在包的安装路径中。
然后修改你的doc函数,核心思路是先把包内的sample.rmd复制到当前工作目录(也就是你的项目目录),再渲染该副本,这样输出的sample.pdf就会生成在当前项目目录下,而非R库目录:
#' @title shiny app to print automated document #' @import shiny rmarkdown utils #' @return shiny app for documents. Type 'doc()' to launch doc. #' @name doc #' @examples #' doc() #' browseURL("sample.pdf") #' #' @export #' doc <- function() { # 获取包内sample.rmd的完整路径 rmd_source <- system.file("sample.rmd", package = "你的包名称") # 将文件复制到当前工作目录(若已存在则覆盖) file.copy(rmd_source, "sample.rmd", overwrite = TRUE) # 渲染当前目录下的sample.rmd,输出PDF到当前目录 rmarkdown::render("sample.rmd", output_file = "sample.pdf") }
关键说明
- 语法修正:你原代码中
rmarkdown::render的括号和逗号位置有误,已修正。 - 避免冗余加载:因为已经通过
@import声明了依赖包,函数内无需再调用library()。 - 文件复制逻辑:通过
file.copy把包内的模板文件复制到当前工作目录,既解决了模板文件的定位问题,又保证输出文件落在你期望的项目目录。如果不希望覆盖现有文件,可以把overwrite参数设为FALSE。
内容的提问来源于stack exchange,提问作者Salvador
相关产品推荐
相关产品推荐

