簡體   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