RMarkdown в блестящем приложении
Проблема
Есть ли способ вставить (и оценить) RMarkdown script в блестящем приложении. (Заметьте, я не ищу блестящее приложение в RMarkdown, которое объясняется здесь, и я не ищу скрипты Markdown в блестящем (см. Shiny Gallery Markdown))
Я создаю приложение с текстом, уравнениями, кодовыми фрагментами, графиками и интерактивными элементами. Для удобства я использую файлы Markdown для текста и уравнений и хотел бы иметь сюжет иногда между ними (т.е. Писать большинство вещей в RMarkdown). Поскольку блестящее приложение более сложное (я использую shinydashboard
, включая многие его уникальные функции), я бы предпочел вариант, который не использует подход, описанный в первая ссылка.
Минимальным рабочим примером будет:
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))
```
Результат:
![Блестящее приложение]()
Target
То, что я хочу иметь, - это выход, если я вяжу файл rmd
:
![HTML-страница RMarkdown]()
В частности, я хочу получить оценку фрагментов кода (заговорить что-то...), и я хочу получить отображаемые математические уравнения.
Любые идеи?
Отредактированное решение
Благодаря вводу @Bunk я решил отобразить все rmd
файлы в md
файлы с помощью команды knit
, а затем включить файлы 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
Я думаю, что вязание и рендеринг пользовательского интерфейса должны работать.
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)
Ответ 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)