Блестящее приложение не отображает файл Rmarkdown как RStudio - PullRequest
0 голосов
/ 17 мая 2019

Я изо всех сил пытаюсь понять, почему sunnyApp не отображает файл Rmarkdown, как это делает RStudio, даже если Rmarkdown явно определен в app.R.

Файл Rmd ниже был написан на RStudio, и когда нажимается кнопка «Выполнить документ», создается HTML-документ с дружественной веб-страницей приложения, боковой панели, страниц и графиков. Однако, если он размещен вместе с файлом app.R на глянце-сервере, возвращаются некоторые ошибки, и в представленном файле отсутствует структура исходного документа (например, боковая панель, страницы и т. Д.). ). Это также может быть сгенерировано путем запуска Rscript --vanilla app.R и перехода к localhost:port.

Вот файлы, которые я использую:

example.Rmd

---
title: "Example file"
runtime: shiny
theme: simplex
vertical_layout: fill
output:
  flexdashboard::flex_dashboard:
    orientation: rows
---

```{r setup, include=FALSE}
library(shiny)
library(tidyverse)
library(plotly)
```

Sidebar {.sidebar}
======================================================================

**Options**

```{r opt_general, echo = FALSE}
selectInput("opt_cyl",
            label = "Select cyl",
            choices = mtcars %>% .$cyl %>% unique %>% sort,
            multiple = TRUE,
            selected = "4")

sliderInput("opt_qsec", label = "Qsec", min = mtcars$qsec %>% min, max = mtcars$qsec %>% max, value = mtcars$qsec %>% max, step = 0.01)
```

**More options**

```{r opt_dist, echo = FALSE}
checkboxInput("opt_log", label = "Log scale (qsec)", value = FALSE)
```

Explore
======================================================================

```{r global, echo=FALSE}
 mtcars$cyl <- as.character(mtcars$cyl)
 ```

 ```{r reactive_global, echo=FALSE}
rcars <- reactive({
   C <- dplyr::filter(mtcars, cyl==input$opt_cyl, qsec <= input$opt_qsec)
  return(C)
})
 ```

Row
------------------------

### One nice plot

```{r plot1a, echo = FALSE}
    uiOutput("r1a")

output$r1a <- renderUI({
  plotlyOutput("p1a")
})

output$p1a <- renderPlotly({
  P <- mtcars %>% ggplot() + geom_point(aes(x=cyl, y=qsec))
  ggplotly(P)
})
```

### Another nice plot

```{r plot1b, echo = FALSE}
uiOutput("r1b")

output$r1b <- renderUI({
  plotlyOutput("p1b")
})

output$p1b <- renderPlotly({
  P <- rcars() %>% ggplot() + geom_point(aes(x=cyl, y=qsec))
  ggplotly(P)
})
```

Row
------------------------

### Second row plot

```{r plot2, echo = FALSE}
uiOutput("r2")

output$r2 <- renderUI({
  plotlyOutput("p2")
})

output$p2 <- renderPlotly({
  C <- rcars()
  if (input$opt_log) C$qsec <- log(C$qsec)
  P <- C %>% ggplot() + geom_point(aes(x=mpg, y=qsec))
  ggplotly(P)
})
```

About
======================================================================

Some nice README

Соответствующий app.R файл:

library(shiny)
library(knitr)

ui <- shinyUI(
  fluidPage(
    uiOutput('markdown')
  )
)

server <-function (input, output) {
  output$markdown <- renderUI({
    HTML(markdown::markdownToHTML(knit('example.Rmd', quiet = TRUE)))
  })
}

shinyApp(ui, server)

Ошибка, возвращаемая в файле журнала:

Прослушивание http://127.0.0.1:44229 Предупреждение: Ошибка в: Результат должен иметь длину 32, а не 0 125: Предупреждение: Ошибка в: Результат должен иметь длину 32, а не 0 100:

Кто-нибудь может дать мне указатель на то, почему это происходит? Спасибо

1 Ответ

2 голосов
/ 20 мая 2019

Вы можете попробовать имитировать функцию rmarkdown::run, изменив app.R, как показано ниже.

library(shiny)

file <- 'example.Rmd'
dir <- dirname(file)

ui <- rmarkdown:::rmarkdown_shiny_ui(dir, file)
render_args <- list()
render_args$envir <- parent.frame()
server <- rmarkdown:::rmarkdown_shiny_server(dir, file, 'UTF-8', T, render_args)

shinyApp(ui, server)
...