2015-11-03 20 views
15

Problema

C'è un modo per inserire (e valutare) uno script RMarkdown in un'applicazione lucida. (Nota, io non sono alla ricerca di un'applicazione lucido in RMarkdown che si spiega here, né sono alla ricerca di script Markdown a lucido (see Shiny Gallery Markdown))RMarkdown in Shiny Application

sto costruendo un'applicazione che ha testo, equazioni, code-pezzi, grafici e elementi interattivi. Per comodità, utilizzo i file Markdown per il testo e le equazioni e vorrei avere una trama a volte in mezzo (ad esempio scrivere la maggior parte delle cose in RMarkdown). Dato che l'app lucida è più complessa (io uso shinydashboard includendo molte delle sue caratteristiche uniche), preferirei un'opzione che non utilizzasse l'approccio descritto nello first link.

Un esempio di lavoro minimo sarebbe:

R-file:

library(shiny) 

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

shinyApp(ui, server) 

e "RMarkdownFile.rmd" nella stessa cartella:

This is a text 

$$ E(x) = 0 $$ 

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

Risultato:

Shiny App

target

Quello che voglio avere è l'uscita se I maglia del rmd -file: RMarkdown HTML page

In particolare, voglio ottenere la valutazione delle code-pezzi (trama qualcosa ...), e voglio ottenere le equazioni matematiche renderizzate.

Qualche idea?

cura soluzione

Grazie all'ingresso di @Bunk, ho scelto di rendere tutti i file rmdmd file con il comando knit e quindi includere i file md nella app lucida (io uso Markdown invece di html come quest'ultimo ha prodotto alcuni problemi con le equazioni). Infine, lo includeMarkdown viene fornito con withMathJax per garantire la corretta visualizzazione delle equazioni.

Il codice finale è simile al seguente:

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) 

risposta

12

Penso che lavorare a maglia e il rendering di un'interfaccia utente dovrebbe funzionare.

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) 
+0

Buona idea, stavo giocando con 'includeHTML' dopo aver usato' knitr' per creare un file HTML. – David

+0

Ci stavo pensando anche a questo, probabilmente potresti eseguire il rendering mentre l'applicazione si carica e lo fa invece. Ciò consente di valutare i blocchi di codice in ambienti specifici. Non so se sia utile in questo caso. – jenesaisquoi

+0

Un'altra domanda, la tua equazione funziona correttamente? – David