web-dev-qa-db-fra.com

RMarkdown dans Shiny Application

Problème

Existe-t-il un moyen d'insérer (et d'évaluer) un script RMarkdown dans une application brillante. (Remarque, je ne cherche pas une application brillante dans RMarkdown qui est expliquée ici , ni des scripts Markdown dans shiny ( voir Shiny Gallery Markdown ))

Je crée une application qui contient du texte, des équations, des morceaux de code, des tracés et des éléments interactifs. Pour plus de commodité, j'utilise des fichiers Markdown pour le texte et les équations et je voudrais avoir un tracé parfois entre les deux (c'est-à-dire écrire la plupart des choses dans RMarkdown). Comme l'application brillante est plus complexe (j'utilise shinydashboard incluant plusieurs de ses fonctionnalités uniques), je préférerais une option qui n'utilise pas l'approche décrite dans le premier lien .

Un exemple de travail minimum serait:

Fichier R:

library(shiny)

ui <- shinyUI(
  fluidPage(
    includeMarkdown("RMarkdownFile.rmd")
  )
)
server <- function(input, output) {}

shinyApp(ui, server)

et "RMarkdownFile.rmd" dans le même dossier:

This is a text

$$ E(x) = 0 $$ 

```{r, eval = T}
plot(rnorm(100))
```

Résultat:

Shiny App

Cible

Ce que je veux, c'est la sortie si je tricote le fichier rmd-: RMarkdown HTML page

Plus précisément, je veux obtenir l'évaluation des morceaux de code (tracer quelque chose ...), et je veux obtenir les équations mathématiques rendues.

Des idées?

Solution modifiée

Grâce à l'entrée de @Bunk, j'ai choisi de rendre tous les fichiers rmd dans les fichiers md avec la commande knit puis d'inclure les fichiers md dans le fichier application brillante (j'utilise markdown au lieu de html car ce dernier a produit quelques problèmes avec les équations). Enfin, le includeMarkdown est enveloppé dans withMathJax pour assurer l'affichage correct des équations.

Le code final ressemble à ceci:

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)
28
David

Je pense que le tricot et le rendu d'une interface utilisateur devraient fonctionner.

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)
19
jenesaisquoi

Selon la demande de @ elevendollar, voici ce que j'ai fini par utiliser:

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)
6
David