使用golem开发嵌入Rmarkdown的Shiny应用时文件调用失败求助
解决Golem打包Shiny应用后无法调用Rmarkdown文件的问题
问题根源
打包成R包后,原项目中的相对路径不再生效,且你的Rmd文件没有被正确纳入包的资源目录中——Golem/R包规范里,非R代码的资源文件(如Rmd、模板)需要放在inst目录下,否则打包时会被忽略。你之前用usethis::use_data_raw是错误的,这个函数用于处理数据集,不适合这类文档资源。
具体修复步骤
调整文件目录结构
在Golem项目根目录下创建inst/reports文件夹,将R_Month_Report.Rmd、R_Month_report_word.Rmd、template_word.docx全部移动到这个文件夹内。修改Shiny代码中的路径调用
用system.file()函数获取包内资源的绝对路径(该函数会自动定位包安装后的资源位置),替换原来的相对路径:output$rendered_markdown <- renderText({ # 获取包内Rmd文件的正确路径 rmd_path <- system.file("reports", "R_Month_Report.Rmd", package = "autoreport") rmarkdown::render( input = rmd_path, output_file = paste0(path_excel_all, "\\R_Month_Report", Sys.Date(),".html") ) })调用其他Rmd或docx模板时,同样用
system.file("reports", "目标文件名", package = "autoreport")来获取路径。重新打包安装
用devtools重新构建并安装包:devtools::install() # 可在项目环境中直接执行,或build后手动安装安装完成后,可通过
system.file(package = "autoreport")查看包的安装路径,确认reports文件夹及其中的文件已被正确包含。
验证
重新运行autoreport::run_app(),Rmarkdown渲染功能即可正常工作。
内容的提问来源于stack exchange,提问作者YY LIU
相关产品推荐
相关产品推荐

