## 19.1 Getting started

You can turn any HTML-oriented R Markdown documents to Shiny documents by adding runtime: shiny to the YAML metadata as a top-level field, e.g.,

---
title: "Shiny Document"
output: html_document
runtime: shiny
---

Note that the output format of the R Markdown document must be an HTML format. That is, the document should generate a web page (a *.html file). Non-HTML formats such as pdf_document and word_document will not work with the Shiny runtime. Please also note that some presentation formats are also HTML formats, such as ioslides_presentation and slidy_presentation.

You can also create a new Shiny document from the RStudio menu File -> New File -> R Markdown, and choose the document type “Shiny” (see Figure 19.1).

To run a Shiny document in RStudio, you need to click the button “Run Document” on the editor toolbar (RStudio will automatically replace the “Knit” button with “Run Document” when it detects a Shiny document). If you do not use RStudio, or want to run the document in the R console for troubleshooting, you can call the function rmarkdown::run() and pass the filename to it.

You can embed Shiny inputs and outputs in your document. Outputs are automatically updated whenever inputs change. In the following example, we create a numeric input (numericInput) with the name rows, and then refer to its value via input$rows when generating output: {r, echo=FALSE} numericInput("rows", "How many cars?", 5) renderTable({ head(cars, input$rows)
})


In the above example, the output code was wrapped in a call to renderTable(). There are many other render functions in Shiny that can be used for plots, printed R output, and more. This example uses renderPlot() to create dynamic plot output:

{r, echo=FALSE}
sliderInput("bins", "Number of bins:", 30, min = 1, max = 50)

renderPlot({
x    = faithful[, 2]  # Old Faithful Geyser data
bins = seq(min(x), max(x), length.out = input\$bins + 1)

# draw the histogram with the specified number of bins
hist(x, breaks = bins, col = 'darkgray', border = 'white')
})