19.3 Embedded Shiny apps
Besides embedding individual Shiny inputs and outputs in R Markdown, it is also possible to embed a standalone Shiny application within a document. There are two ways to do this:
Defining the application inline using the
shinyApp()
function; orReferring to an external application directory using the
shinyAppDir()
function.
Both functions are available in the shiny package (not rmarkdown), which will be automatically loaded when runtime: shiny
is specified in the YAML metadata of the document, so you do not have to call library(shiny)
to load shiny (although it does not hurt if you load a package twice).
19.3.1 Inline applications
This example uses an inline definition:
```{r, echo=FALSE}
shinyApp(
ui = fluidPage(
selectInput("region", "Region:",
choices = colnames(WorldPhones)),
plotOutput("phonePlot")
),
server = function(input, output) {
output$phonePlot = renderPlot({
barplot(WorldPhones[,input$region]*1000,
ylab = "Number of Telephones", xlab = "Year")
})
},
options = list(height = 500)
)
```
Note the use of the height
parameter to determine how much vertical space the embedded application should occupy.
19.3.2 External applications
This example embeds a Shiny application defined in another directory:
```{r, echo = FALSE}
shinyAppDir(
system.file("examples/06_tabsets", package="shiny"),
options = list(width = "100%", height = 700)
)
```
Note that in all of R code chunks above, the chunk option echo = FALSE
is used. This is to prevent the R code within the chunk from rendering to the output document alongside the Shiny components.