在Rmarkdown中保存Navbar Shiny App

时间:2016-01-15 19:11:42

标签: r datatables shiny r-markdown dt

我试图将Rinydown文件中的Shiny应用程序保存为独立的HTML页面。

我可以用一个简单的DT :: datatable():

来做到这一点
---
title: "Test4"
runtime: shiny
output: html_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

```{r t4, echo=FALSE, message=FALSE, echo=FALSE}
DT::datatable(iris)

接着是

rmarkdown::render(input = "Test4.Rmd", output_file = "Test4.html", runtime = "shiny")

给我一​​个带有虹膜数据集的html文件,我可以根据需要将其粘贴在文件服务器上。 $Employer非常喜欢Joe Cheng等人为我指出解决方案。

另外,Joe Cheng在谷歌Shiny小组发送了这个: 如果您只有一个DT::datatable()对象(称之为" x"),则可以调用htmlwidgets::saveWidget(x, "filepath.html")将其另存为HTML页面

但是,$employer现在要求我以标签格式将其中两个放在一起。

当我使用此代码时,如果我使用"运行文档"则Rmd页面会正确呈现。来自RStudio:

---
title: "Test3"
runtime: shiny
output: html_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

## Embedded Application

Test To Try and Render This Out As Standalone Tabbed Shiny App With Two DT::Dataframes.

```{r tabsets, echo=FALSE, warning=FALSE, message=FALSE}
shinyApp(
  ui <- (
  navbarPage(
  title = 'Testing Saving Shiny',
  tabPanel('MTCars', DT::dataTableOutput('mtcarz')) ,
  tabPanel('Irises', DT::dataTableOutput('iriz'))
  )
  )
  , 
  server <- (function(input, output) {
  output$mtcarz <- DT::renderDataTable({
  DT::datatable(
  mtcars,
  escape = FALSE,
  rownames = FALSE,
  options = list(
  pageLength = 25,
  autoWidth = TRUE
  )
  )
  })

  output$iriz <- DT::renderDataTable({
  DT::datatable(
  iris,
  escape = FALSE,
  rownames = FALSE,
  options = list(
  pageLength = 25,
  autoWidth = TRUE
  )
  )
  })
  })

)
```

但是当我在它上面使用rmarkdown :: render时,HTML页面给了我预期的框架(标题等),但没有任何标签/数据框。

我使用DT的v.1,rmarkdown的v.0.9.2和闪亮的v.0.12.2以及R 3.2.1。

1 个答案:

答案 0 :(得分:2)

我可能会遗漏某些内容,但我不知道Shiny个应用在没有Shiny服务器的情况下可以正常运行。这会动态吗?如果没有,你可以做这样的事情。

```{r echo = FALSE, warning = FALSE}
library(shiny)
navbarPage(
  title = 'Testing Saving Shiny',
  tabPanel('MTCars', DT::datatable(
    mtcars,
    escape = FALSE,
    rownames = FALSE,
    options = list(
      pageLength = 25,
      autoWidth = TRUE
    )
  )),
  tabPanel('Irises', DT::datatable(
    iris,
    escape = FALSE,
    rownames = FALSE,
    options = list(
      pageLength = 25,
      autoWidth = TRUE
    )
  ))
)
```