【问题标题】:Put an RMarkdown::Render inside a future function in ShinyApp在 ShinyApp 的未来函数中放置一个 RMarkdown::Render
【发布时间】:2018-09-05 02:18:18
【问题描述】:

我有一个闪亮的应用程序,需要在“未来”函数中放置一个 RMarkdown::render,以使其他用户能够在 RMD 加载/渲染时继续使用该应用程序。下面的代码在运行应用程序并单击下载按钮时有效。但是,当我取消注释新代码、实现未来并运行应用程序时,我收到错误“找不到对象‘参数’。”

output$snapshot_report_pdf_download <- downloadHandler( 

      filename = function() {
        if(trimws(input$snap_print_pdf_save_name,"both") == "") {
          "Portfolio Snapshot Report.pdf"
        } else {
          paste0(input$snap_print_pdf_save_name, ".pdf")              
        }
      },

      content = function(file){
        params <- list(
          ohf_sh_obj = ohf_sh_obj,
          data_date = ohf_sh_obj$data_date,
          report = "portfolio_snapshot",
          graph = input$snap_print_graphs,
          wl_selection_snap = input$wl_selection_snap,
          date_selection_snap = input$date_selection_snap,
          stacked_snap = input$stacked_snap
           )

        out <- render('scripts/printing/report_pdf.rmd')

        file.rename(out, file)

        if (file.exists("scripts/printing/report_pdf.rmd")) {
          file.remove("scripts/printing/report_pdf.rmd")
         }

        # future({render('scripts/printing/report_pdf.rmd',
        #                params = params)},
        #        globals = T,
        #        packages = c("knitr", "rmarkdown")) %...>%
        #   (function(result) {
        #     file.rename(result, file)                
        }
      })

任何帮助将不胜感激。

【问题讨论】:

  • 你能解决这个问题吗?
  • 很遗憾,没有。

标签: r promise shiny r-markdown future


【解决方案1】:

我有一个与您的问题相似但不完全相同的问题,因为我需要在未来使用 render()。我最终只是创建了一个render_async() fx:

    render_async <- function(file_path, params){
      future({
        render("report/GA_report.Rmd", 
             output_format = "all", 
             output_file = file_path,
             params = params, 
             envir = new.env(), 
             run_pandoc = TRUE)
      })
    }

    report$filepath <- render_async(tmp_file, params)

我认为没有找到您的 params 的原因是 future() 语句在单独的 R 会话中运行其中的任何内容,这允许其他用户使用您的应用程序,而future() 正在运行。如果你最终做了类似于我上面显示的事情,你的params obj 将在运行render() 语句的会话中,并且错误应该消失。

【讨论】:

    猜你喜欢
    • 2023-02-05
    • 2022-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-14
    • 2023-03-12
    相关资源
    最近更新 更多