Home > Software engineering >  Shiny: pre-assign a value to a reactive varible
Shiny: pre-assign a value to a reactive varible

Time:03-22

I have a shiny app which is used to sample 10 rows of iris data.

When I start this shiny app for the first time, I need to click the sampling action button to display the sampled iris rows.

Is it possible to pre-assign a value that could allow shiny to display the sampled iris data when I first open the app?

Below is the original code.

library(shiny)

ui = fluidPage(
  actionButton(inputId = "sampling", label = "Sample rows"),
  tableOutput("DFTable")
)

server = function(input, output, session){
  
 n <- eventReactive(input$sampling, {
   getrows <- dim(iris)[1]
   return(sample(1:getrows, 10))
 })
  
  output$DFTable <- renderTable(iris[n(), ])
  
}

shinyApp(ui, server)

I tried two ways, both didn't work.

  1. to initiate a default value for n
n <- reactiveVal(value = 1:10)
  1. use if() function
output$DFTable <- renderTable(
if(is.null(n())){n() = 1:10}
iris[n(), ]
)

Thanks a lot for your help.

CodePudding user response:

Would the following work for you?

library(shiny)

ui = fluidPage(
  actionButton(inputId = "sampling", label = "Sample rows"),
  tableOutput("DFTable")
)

server = function(input, output, session){
  
  values <- reactiveValues()
  values$n <- sample(1:nrow(iris), 10)
  
  observeEvent(input$sampling, {
    values$n <- sample(1:nrow(iris), 10)
  })

  output$DFTable <- renderTable(iris[values$n, ])
  
}

shinyApp(ui, server)
  • Related