繁体   English   中英

在Shiny选项卡中使用多个R Markdown文件

[英]Use multiple R Markdown files in Shiny tabs

我正在构建一个Shiny App,我想要有多个tabset。 我到目前为止的代码给了我:

shinyUI(navbarPage("OEI Grant",
  tabPanel("Part 1 - Organization",
           tabsetPanel("1.x",
                       tabPanel("1.1"),
                       tabPanel("1.2"),
                       tabPanel("1.3")
                       ))))

当前布局

我无法弄清楚的部分是如何为每个选项卡(1.1,1.2等)获取单独的交互式文档(R markdown .Rmd文件)。

我正在寻找相当于includeMarkdown()函数,但对于R Markdown文件本身包含Shiny Apps。

例如在1.1中我可能想要显示以下简单.Rmd文件的输出:

---
runtime: shiny
---
# Data visualization

Example visualization

```{r read-in-data, echo = FALSE, eval=TRUE, message=TRUE}
library(ggplot2)
data(OrchardSprays) # Use this data                                                                                                                                                                            
head(OrchardSprays)
```

## Histogram

We can also look at this data in an interactive histogram.

```{r histogram, echo = FALSE, eval=TRUE}
shinyAppDir(
    "histogram/",
    options=list(width="100%", height=450)
  )
```

这个RTutor Shiny App类似于我正在尝试做的事情,就多个标签而言,从查看他们的代码,我认为所有内容都在一个R markdown文件中提供,并以某种方式解析为不同的部分。

R Markdown文档讨论了链接多个页面,但我想要内容而不是链接。

Gallery for Tabsets中唯一的示例显示了如何将server.R的输出放入不同的选项卡,但不是单独的R Markdown文件。

关于如何做到这一点的任何想法?

作为前面回答中提到的方法的替代方法,您可能希望尝试此repo https://github.com/vnijs/shiny-site中说明的方法。 这是一个概念证明,你可以使用Knitr渲染rmarkdown文件,而不需要将文件拆分成部分。 它的工作原理是使用Shiny的renderUI功能并评估shinyServer环境中的rmarkdown文件。

可能这没有什么帮助,因为它没有回答关键问题,如何将交互式降价文件(带有光泽)放入选项卡中。

RTutor解析一个Rmd解决方案文件,将其分成不同的部分,然后使用大量动态UI,其中填充了通过编织这些部分创建的html输出。

要将变量txt中的markdown源动态编织为html,您可以使用:

ktxt = knit(text=txt) html= markdownToHTML(text=ktxt, fragment.only=TRUE)

您可以通过相应的渲染函数将创建的html分配给htmlOutputuiOutput (请参阅http://shiny.rstudio.com/articles/dynamic-ui.html )。 (RTutor使用包有shineEvents的setUI函数来渲染html,但这只是一个包装器。)

我不知道是否有可能呈现具有以这种方式嵌套的闪亮应用程序的Rmd代码。 在RTutor中,交互性由RTutor包执行,该包可以动态构建所有小部件。 底层Rmd文件中没有闪亮的代码。

我目前的方法类似于@ sebastian-kranz的评论。 我将Rmd文件分解为块,因为在闪亮的应用程序(AFAIK)中调用markdown文档时,交互式元素将无法工作。 以下示例。 如果您可以创建一个适用于运行时的动态降价文档,那将会非常棒:闪亮然后从Shiny应用程序调用它。

output$mini_case_1 <- renderUI({
  tagList(
    rmarkdown::render("./cases/case1/01_test.Rmd", html_document()),
    inclRmd("./cases/case1/01_mini_case_1.Rmd"),
    sliderInput("price_coeff", label = "Adjust price sensitivity:", min = -20, max = 0, value = -6, step = 1),
    plotOutput("mc1_demand"),
    inclRmd("./cases/case1/02_mini_case_1.Rmd"),
    sliderInput("price", label = "Adjust price:", min = 0, max = 12, value = 3, step = 1),
    plotOutput("mc1_profit"),
    inclRmd("./cases/case1/03_mini_case_1.Rmd")
  )
})

inclRmd <- function(path) {
  paste(readLines(path, warn = FALSE), collapse = '\n') %>%
  knitr::knit2html(text = ., fragment.only = TRUE, options = "",
                   stylesheet=file.path(r_path,"../www/empty.css")) %>%
    gsub("&lt;!--/html_preserve--&gt;","",.) %>%
    gsub("&lt;!--html_preserve--&gt;","",.) %>%
    HTML %>%
    withMathJax
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM