Include reactive text in a R markdown shiny documents - r

I am a little lost and am unable to add a reactive test (te) in the shiny output of an R markdown document. A minimal example based on an R studio example is paste below.
Many thanks in advance!
Jean-Pierre
---
title: "Untitled"
runtime: shiny
output: html_document
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
```{r eruptions, echo=FALSE}
inputPanel(
selectInput("n_breaks", label = "Number of bins:",
choices = c(10, 20, 35, 50), selected = 20),
sliderInput("bw_adjust", label = "Bandwidth adjustment:",
min = 0.2, max = 2, value = 1, step = 0.2)
)
renderText({te})
renderPlot({
startTime <- Sys.time()
# additional code goes here
endTime <- Sys.time() +1
te <- reactive(startTime - endTime)
hist(faithful$eruptions, probability = TRUE, breaks = as.numeric(input$n_breaks),
xlab = "Duration (minutes)", main = "Geyser eruption duration")
dens <- density(faithful$eruptions, adjust = input$bw_adjust)
lines(dens, col = "blue")
})
```

I think you should use te <<- reactive(startTime - endTime) to define te outside the renderPlot, use renderText({te()}) instead of renderText({te}) because it is a reactive expression, and finally put renderText({te()}) to the end after it's definition.

Related

Is it possible to set host and port in Rmarkdown document with runtime: shiny?

Say we are working with an rmarkdown document with the following yaml (example runtime: shiny "app"):
---
runtime: shiny
output: html_document
---
### Here are two Shiny widgets
```{r echo = FALSE}
selectInput("n_breaks", label = "Number of bins:",
choices = c(10, 20, 35, 50), selected = 20)
sliderInput("bw_adjust", label = "Bandwidth adjustment:",
min = 0.2, max = 2, value = 1, step = 0.2)
```
### ...that build a histogram.
```{r echo = FALSE}
renderPlot({
hist(faithful$eruptions, probability = TRUE,
breaks = as.numeric(input$n_breaks),
xlab = "Duration (minutes)",
main = "Geyser eruption duration")
dens <- density(faithful$eruptions, adjust = input$bw_adjust)
lines(dens, col = "blue")
})
```
With a regular shiny app we can set the host and port by setting options: shinyApp(ui, server, options = list(host = '123.45.67.89', port = 1234))
Is it possible to establish and set a specific host and port in the YAML? Or somewhere else in the setup?
do this
option1
rmarkdown::run("test.Rmd", shiny_args = list(host = '123.45.67.89', port = 1234))
test.Rmd is the name of your doc. make sure your host 123.45.67.89 is valid. Usually is 127.0.0.1 for local testing or don't provide it to use the default.
option 2
options(shiny.port = 1234)
options(shiny.host = '127.0.0.1')
rmarkdown::run("test.Rmd")

Shiny Document: how to center align output of RenderPlot

I am creating a Shiny Document in R and want the plot generated with Shiny RenderPlot to be centered, or right, or height = 50%. However, the fig.align=center or right or out-width = "50%" in the r chunk does not affect the output (I suppose it is for figures generated directly in R, not via Shiny). How to center?
Try to change out.width, or fig.align, and it won't change a thing.
--
title: "Untitled"
author: "Gahis"
date: "8/4/2021"
output: html_document
runtime: shiny
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
```{r eruptions, echo=FALSE, fig.align='right', out.width="50%"}
inputPanel(
selectInput("n_breaks", label = "Number of bins:",
choices = c(10, 20, 35, 50), selected = 20),
sliderInput("bw_adjust", label = "Bandwidth adjustment:",
min = 0.2, max = 2, value = 1, step = 0.2)
)
renderPlot({
hist(faithful$eruptions, probability = TRUE, breaks = as.numeric(input$n_breaks),
xlab = "Duration (minutes)", main = "Geyser eruption duration")
dens <- density(faithful$eruptions, adjust = input$bw_adjust)
lines(dens, col = "blue")
})
```
Thanks!
Here is how you can reduce the width of the plot and centering it. Add this CSS:
<style>
.center50 {
margin: auto;
width: 50%;
}
</style>
Then include you renderPlot in a div with the class center50:
---
title: "Test"
output: html_document
runtime: shiny
---
<style>
.center50 {
margin: auto;
width: 50%;
}
</style>
```{r}
inputPanel(
selectInput("n_breaks", label = "Number of bins:",
choices = c(10, 20, 35, 50), selected = 20),
sliderInput("bw_adjust", label = "Bandwidth adjustment:",
min = 0.2, max = 2, value = 1, step = 0.2)
)
```
```{r}
div(class = "center50",
renderPlot({
hist(faithful$eruptions, probability = TRUE, breaks = as.numeric(input$n_breaks),
xlab = "Duration (minutes)", main = "Geyser eruption duration")
dens <- density(faithful$eruptions, adjust = input$bw_adjust)
lines(dens, col = "blue")
})
)
```

Darkly Theme RMarkdown

I am having problems setting a Darkly theme to an RMarkdown document. I am getting a light greenish background instead. Is there a solution for it? See below
---
title: "Untitled"
author:
date: "July 29, 2020"
output:
flexdashboard::flex_dashboard:
theme: darkly
runtime: shiny
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
```{r eruptions, echo=FALSE}
inputPanel(
selectInput("n_breaks", label = "Number of bins:",
choices = c(10, 20, 35, 50), selected = 20),
sliderInput("bw_adjust", label = "Bandwidth adjustment:",
min = 0.2, max = 2, value = 1, step = 0.2)
)
renderPlot({
hist(faithful$eruptions, probability = TRUE, breaks = as.numeric(input$n_breaks),
xlab = "Duration (minutes)", main = "Geyser eruption duration")
dens <- density(faithful$eruptions, adjust = input$bw_adjust)
lines(dens, col = "blue")
})
```

How to get code folding with shiny embedding in the same rmarkdown html document?

I am trying to create an rmd html document which uses code folding as well as shiny embedding. I have tried to do this using the default shiny rmd doc but adding in code_folding: hide:
---
title: "Untitled"
author: "Author"
date: "3/29/2019"
output:
html_document:
code_folding: hide
runtime: shiny
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
## Inputs and Outputs
You can embed Shiny inputs and outputs in your document. Outputs are automatically updated whenever inputs change. This demonstrates how a standard R plot can be made interactive by wrapping it in the Shiny `renderPlot` function. The `selectInput` and `sliderInput` functions create the input widgets used to drive the plot.
```{r eruptions}
inputPanel(
selectInput("n_breaks", label = "Number of bins:",
choices = c(10, 20, 35, 50), selected = 20),
sliderInput("bw_adjust", label = "Bandwidth adjustment:",
min = 0.2, max = 2, value = 1, step = 0.2)
)
renderPlot({
hist(faithful$eruptions, probability = TRUE, breaks = as.numeric(input$n_breaks),
xlab = "Duration (minutes)", main = "Geyser eruption duration")
dens <- density(faithful$eruptions, adjust = input$bw_adjust)
lines(dens, col = "blue")
})
```
Which gives:
So as you can see, the code is not folded/hidden. I have successfully implemented each of these individually, but how can they both be used in the same document? I think they clash somehow - does anyone know of a workaround?
Thanks!

Reloading Rmd Html Document with Shiny Widets

I am looking at using Shiny widgets in an R-markdown file. I find this example, ran it in markdown, and then saved it as Html. However when I load it, it renders the widgets twice, and then hangs.
Is there a way I can avoid this, or is it a bug/known limitation in the system?
Here is the code:
---
runtime: shiny
output: html_document
---
### Here are two Shiny widgets
```{r echo = FALSE}
selectInput("n_breaks", label = "Number of bins:",
choices = c(10, 20, 35, 50), selected = 20)
sliderInput("bw_adjust", label = "Bandwidth adjustment:",
min = 0.2, max = 2, value = 1, step = 0.2)
```
### ...that build a histogram.
```{r echo = FALSE}
renderPlot({
hist(faithful$eruptions, probability = TRUE, breaks = as.numeric(input$n_breaks),
xlab = "Duration (minutes)", main = "Geyser eruption duration")
dens <- density(faithful$eruptions, adjust = input$bw_adjust)
lines(dens, col = "blue")
})
```
It works fine when I compile it, but when I save it and then reload it into Chrome, IE, Edge, etc... I get this:

Resources