【问题标题】:Render rmarkdown to character variable将 rmarkdown 渲染到字符变量
【发布时间】:2023-03-06 03:03:01
【问题描述】:

我对 R 降价相当陌生。我已经构建了一个应用程序,该应用程序需要用户提供多个输入来生成一个表,然后可以将其保存在本地。 我现在被要求实现一种报告来列出用户插入的所有变量(在一种格式化的文档中),以便在生成表格之前可以查看所有设置并在出现错误时更改它们。

为了避免主要的 UI 重组,我考虑使用 r markdown 文档并将其可视化在模式中。我的问题是 rmarkdown::render 呈现到输出,而 bs_modal 将参数正文作为字符 (HTML) 变量。 有没有办法使这项工作?还是有更好的方法来实现这一点?

一个最小的例子:

我的.Rmd

---
title: "Dynamic report"
output:
  html_document: default
  pdf_document: default
params:
  n : NA
---

A plot of `r params$n` random points.

```{r, echo=FALSE}
plot(rnorm(params$n), rnorm(params$n))
```

我的App.R

library(shiny)
library(bsplus)
library(rmarkdown)

shinyApp(
  ui = fluidPage(
    selectInput(
      inputId = "numb",
      label = "Label with modal help",
      choices = 50:100
    ),
    actionButton(inputId = "mysheet",
                 label = "Open modal") %>%  bs_attach_modal(id_modal = "modal1"),
    textOutput("result")
  ),
  server = function(input, output) {
    observeEvent(input$mysheet, {
      params <- input$numb
      md_out <-
        rmarkdown::render(
          "report.Rmd",
          params = params,
          envir = new.env(parent = globalenv())
        )
      bs_modal(
        id = "modal1",
        title = "Equations",
        body = md_out,
        size = "medium"
      )
      
    })
    output$result <- renderText({
      paste("You chose:", input$numb)
    })
  }
)

【问题讨论】:

    标签: r shiny r-markdown


    【解决方案1】:

    bs_modal 不能这样工作,它必须在 UI 中。下面是使用经典 Shiny 模态的解决方案,没有 bsplus 或其他包。

    library(shiny)
    
    shinyApp(
      ui = fluidPage(
        selectInput(
          inputId = "numb",
          label = "Label with modal help",
          choices = 50:100
        ),
        actionButton(inputId = "mysheet",
                     label = "Open modal"),
        textOutput("result")
      ),
      server = function(input, output) {
        observeEvent(input$mysheet, {
          params <- list(n = input$numb)
          md_out <-
            rmarkdown::render(
              "report.Rmd",
              params = params,
              envir = new.env(parent = globalenv())
            )
          showModal(modalDialog(
            includeHTML(md_out),
            title = "Equations",
            size = "m"
          ))
          
        })
        output$result <- renderText({
          paste("You chose:", input$numb)
        })
      }
    )
    

    使用html_fragment 作为 Rmd 输出:

    ---
    title: "Dynamic report"
    output:
      html_fragment
    params:
      n : NA
    ---
    
    A plot of `r params$n` random points.
    
    ```{r, echo=FALSE}
    plot(rnorm(params$n), rnorm(params$n))
    ```
    

    【讨论】:

      猜你喜欢
      • 2023-04-04
      • 1970-01-01
      • 2021-06-13
      • 1970-01-01
      • 2016-03-06
      • 1970-01-01
      • 2023-04-03
      • 2017-09-17
      • 1970-01-01
      相关资源
      最近更新 更多