• R语言
  • 咨询golem包开发shiny(内嵌Rmarkdown)并封装成包但是不能调用Rmarkdown的相关问题

想咨询下大家,golem包开发shiny(内嵌Rmarkdown)后,用devtools封装后,重新安装包,但是不能调用我嵌套的Rmarkdown的问题,提示Error: The file 'R\R_Month_Report.Rmd' does not exist.,想问下大家对这一块应该如何解决呢?实在找不到答案了

问题详细情况如下:
我现在用golem包开发了一个shiny小程序供同事使用,目的是快速生成一个月报格式,包括HTML + Word,目前在R studio上面是走的通(run_dev文件可以正常打开shiny 界面,并且完成HTML + Word输出)。
参考的是这篇帖子:https://www.cnblogs.com/listen2099/p/14086795.html。R-Portable 的版本是4.2.0。

在Shiny sever 里面调用Rmarkdown文件的代码如下:

output$rendered_markdown <- renderText({ rmarkdown::render(input = "R\\R_Month_Report.Rmd", output_file = paste0(path_excel_all, "\\R_Month_Report",Sys.Date(),".html"))}
我的Rmarkdown文件是放在了RProj的R文件下,在Rproj的环境下,用run_app()打开shiny app,所有一切功能均正常

然后使用devtools进行封装,代码为
devtools::build(path = "E:\\myShinyApp\\autoreport")
使用install加载包autoreport, 在非Rproject环境,重新打开一个R文件,并运行autoreport::run_app(),能够打开shiny界面,但是功能出现了意外,写在R shiny里面的功能代码运行正常,但是上述** rmarkdown::render** 功能的异常,提示Error: The file 'R\R_Month_Report.Rmd' does not exist.
我检查了下编译后的R包,R文件夹下面就三个文件,其中两个是rdb和rdx。

后续我在02_dev.R 文件里面尝试加入下述代码
解释是Add internal datasets If you have data in your package
usethis::use_data_raw(name = "R\\R_Month_Report.Rmd", open = FALSE)
usethis::use_data_raw(name = "R\\R_Month_report_word.Rmd", open = FALSE)
usethis::use_data_raw(name = "R\\template_word.docx", open = FALSE)

均未能成功,依然报错。
已经尝试搜索解决2天了,实在搞不定,想问下大家这种情况应该如何解决?

因为 installed package 中文件的路径相对 source package 发生了改变,需要使用 system.file() 取得 source package 中 inst/ 下的文件对应 installed package 中的路径。

为了防止开发时忘记重新 install 而读到旧文件,可以使用 pkgload::is_dev_package() 之类的条件判断是否在开发状态下,在开发状态下实时读取 source package 的路径,在 installed 状态下用 system.file() 读取。

同困惑,将shiny打包为exe的感觉弄起来太复杂了,不知道有没有啥便捷的办法;最近发布的Posit Connect,感觉像是shinyio的升级版;

    kk8900 楼主问的问题是关于封装成 R package,而非连带所有依赖打成可执行文件做桌面部署。