闪亮应用程序中的 RMarkdown

Posted

技术标签:

【中文标题】闪亮应用程序中的 RMarkdown【英文标题】:RMarkdown in Shiny Application 【发布时间】:2016-02-03 15:17:08 【问题描述】:

问题

有没有办法在闪亮的应用程序中插入(和评估)RMarkdown 脚本。 (注意,我不是在寻找在 RMarkdown 中解释为 here 的闪亮应用程序,也不是在寻找闪亮的 Markdown 脚本 (see Shiny Gallery Markdown))

我正在构建一个包含文本、方程式、代码块、绘图和交互式元素的应用程序。为方便起见,我将 Markdown 文件用于文本和方程式,并且有时希望在两者之间绘制一个图(即在 RMarkdown 中编写大部分内容)。由于闪亮的应用程序更复杂(我使用shinydashboard,包括它的许多独特功能),我更喜欢不使用first link 中描述的方法的选项。

一个最小的工作示例是:

R 文件:

library(shiny)

ui <- shinyUI(
  fluidPage(
    includeMarkdown("RMarkdownFile.rmd")
  )
)
server <- function(input, output) 

shinyApp(ui, server)

和“RMarkdownFile.rmd”在同一个文件夹中:

This is a text

$$ E(x) = 0 $$ 

```r, eval = T
plot(rnorm(100))
```

结果:

目标

如果我编织rmd-文件,我想要的是输出:

具体来说,我想获得代码块的评估(绘制一些东西...),并且我想获得渲染的数学方程式。

有什么想法吗?

编辑解决方案

感谢@Bunk 的输入,我选择使用命令knit 将所有rmd 文件渲染为md 文件,然后在闪亮的应用程序中包含md 文件(我使用markdown 而不是html因为后者产生了一些方程问题)。最后,includeMarkdown 包裹在 withMathJax 中,以确保正确显示方程式。

最终代码如下所示:

library(shiny)
library(knitr)

rmdfiles <- c("RMarkdownFile.rmd")
sapply(rmdfiles, knit, quiet = T)

ui <- shinyUI(
    fluidPage(
        withMathJax(includeMarkdown("RMarkdownFile.md"))
  )
)
server <- function(input, output)  

shinyApp(ui, server)

【问题讨论】:

您的解决方案更适合我。您介意将其发布为正确答案吗? 当然,见下文。 【参考方案1】:

我认为编织它并渲染 UI 应该可以工作。

library(shiny)
library(knitr)

ui <- shinyUI(
    fluidPage(
        uiOutput('markdown')
  )
)
server <- function(input, output) 
    output$markdown <- renderUI(
        HTML(markdown::markdownToHTML(knit('RMarkdownFile.rmd', quiet = TRUE)))
    )


shinyApp(ui, server)

【讨论】:

好主意,在使用 knitr 创建 HTML 文件后,我只是在玩 includeHTML 我也在考虑这个问题,您可能可以在应用程序加载时渲染并改为这样做。这样做可以让您评估特定环境中的代码块。我不知道这在这种情况下是否有用。 还有一个问题,你的方程渲染正确吗? 是的,它对我有用,我在 Firefox 上运行它。我认为您只需要确保 mathjax 脚本正在加载。 你可以乱用withMathJax()函数。【参考方案2】:

根据@elevendollar 的要求,这就是我最终使用的:

library(shiny)
library(knitr)

rmdfiles <- c("RMarkdownFile.rmd")
sapply(rmdfiles, knit, quiet = T)

ui <- shinyUI(
    fluidPage(
        withMathJax(includeMarkdown("RMarkdownFile.md"))
  )
)
server <- function(input, output)  

shinyApp(ui, server)

【讨论】:

你使用了sapply,所以我认为它适用于超过 1 个rmdfiles 的长度。但是在includeMarkdown("RMarkdownFile.md")) 中,您使用的是硬编码文件名。为什么?您能否将其设为向量以使答案更完整以用于更一般的向量场景?谢谢

以上是关于闪亮应用程序中的 RMarkdown的主要内容,如果未能解决你的问题,请参考以下文章

尝试包含 RMarkDown 时,闪亮的服务器无法打开连接

闪亮的 Rmarkdown 超链接到本地​​ PDF

Rmarkdown:knit_child环境中闪亮的DT服务器上下文无法呈现

在Rmarkdown文档中调整嵌入式Shiny App的大小

rmarkdown::render() 不允许同时有多个用户?

改变图形大小(Rstudio、Rmarkdown、Shiny)