首页 > 解决方案 > 有没有办法在添加 RShiny 按钮的同时保持即时操作?

问题描述

我是 RShiny 的新手。我做了一个程序,效果很好。它包含一个模拟功能,当参数发生变化时,它可以立即做出反应。但是,我想添加一个可以使用该参数并再次运行模拟功能的按钮。另外,我想保持即时反应。

我创建了一个类似的示例。

library(shiny)

ui <- fluidPage(

# Application title
titlePanel("Testing"),

# Sidebar with a slider input for number of sample
sidebarLayout(
  sidebarPanel(
     sliderInput("n",
                 "Number:",
                 min = 1,
                 max = 10,
                 value = 5)
  ),
  
  # Show sample result
  mainPanel(
    textOutput("sample")
  )
 )
)

# Define server logic
server <- function(input, output) {

x <- c(1:100)

output$sample <- renderPrint({
 sample(x, input$n)
 })
}

# Run the application 
shinyApp(ui = ui, server = server)

就像在这个示例中一样,我从 1 到 100 采样了 N 个数字。当 slicebar 更改时,结果会立即更改。同时,我想添加一个按钮,可以再次重新采样 N 个数字并获得另一个结果。

在这种情况下,我应该为按钮选择哪个功能?非常感谢你的帮助!

标签: rrshiny

解决方案


您可以添加一个操作按钮,然后将您的数据移动到依赖于按钮和输入值的反应元素中。例如

library(shiny)

ui <- fluidPage(
  
  # Application title
  titlePanel("Testing"),
  
  # Sidebar with a slider input for number of sample
  sidebarLayout(
    sidebarPanel(
      sliderInput("n", "Number:", min = 1, max = 10, value = 5),
      actionButton("rerun", "Rerun")
    ),
    
    # Show sample result
    mainPanel(
      textOutput("sample")
    )
  )
)

# Define server logic
server <- function(input, output) {
  
  x <- c(1:100)
  
  current_data <- reactive({
    input$rerun
    sample(x, input$n)
  })
  
  output$sample <- renderPrint({
    current_data()
  })
}

# Run the application 
shinyApp(ui = ui, server = server)

推荐阅读