Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Hide shiny output

How do you hide rendered shiny output? Specifically, I have some figures/tables generated by shiny and I have a button, that when clicked should hide the figures/tables, and when clicked again should show them.

This is what I have so far (below), and it works somewhat, but where it's supposed to hide the renderPlot output, there is a big blank space in the document that I am trying to make go away.

It should be possible to just copy and paste this code into Rstudio and hit run document (it's rmarkdown with shiny runtime).

---
runtime: shiny
---

```{r, echo=F}
actionButton("hide", "Hide")
dat <- data.frame(a=1:10, b=rexp(10, 1/10), c=letters[sample(1:24, 10)])
renderTable({
    if (input$hide %% 2 == 1)
        dat
})

```
lodi dodi

```{r, echo=F}
renderPlot({
    if (input$hide %% 2 == 1)
        plot(b ~ a, data=dat)
})

```
this text is separated by blank space, but it shouldn't be
like image 915
user12912834 Avatar asked Dec 06 '22 21:12

user12912834


1 Answers

You can use the shinyjs package to hide elements with the hide() function (or use the toggle() function to alternate between hiding and showing). Disclaimer: I wrote that package.

I've never used it in an rmarkdown before, so I'm just going to show how to use it in a normal shiny app and use the shinyApp() function to include a full shiny app inside an rmarkdown. You can read here about how to include shiny apps inside an rmarkdown doc.

---
runtime: shiny
---

```{r, echo=F}
suppressPackageStartupMessages(
  library(shinyjs)
)

dat <- data.frame(a=1:10, b=rexp(10, 1/10), c=letters[sample(1:24, 10)])

shinyApp(
  ui = fluidPage(
    useShinyjs(),
    actionButton("hide", "Hide"),
    p("Text above plot"),
    plotOutput("plot"),
    p("Text below plot")
  ),
  server = function(input, output, session) {
    output$plot <- renderPlot({
      plot(b ~ a, data=dat)
    })

    observeEvent(input$hide, {
      hide("plot")
      # toggle("plot") if you want to alternate between hiding and showing
    })
  },
  options = list(height = 700)
)
```

In order to be able to use hide, I had to:

  • install and load shinyjs
  • add a call to useShinyjs() in the UI
  • call hide or toggle on the element that you want to hide/show

I hope this helps

like image 114
DeanAttali Avatar answered Dec 27 '22 21:12

DeanAttali