【问题标题】:How to save input to variable after button click in Shiny?在 Shiny 中单击按钮后如何将输入保存到变量?
【发布时间】:2020-12-20 21:34:51
【问题描述】:

我是闪亮的新手,但我尝试编写一个简单的应用程序。它将连接到 DB,下载 DF 并在现场打印。我得到了这个。现在我想选择范围以将 DF 的一部分保存为 csv。

所以我必须输入标签:开始和停止,以及操作按钮。

我试图找到如何实现该功能的信息,但我没有。我找到了一些关于观察功能的信息,但它在我的示例中完全不起作用。当我像在官方文档中那样做时,在按钮点击后会发生。

我的代码:

ui <- fluidPage(
  titlePanel("Skrypt"),
  
  DT::dataTableOutput("table"),
  
  numericInput("Start", "Start", 0),
  verbatimTextOutput("v1"),
  
  numericInput("Stop", "Stop", length(a)),
  verbatimTextOutput("v"),
  
  actionButton("button", "Generate For Range")

)
  
server <-  function(input, output) {
  
  
  # Filter data based on selections
  output$table <- DT::renderDataTable(DT::datatable({
    data <- myDat}))
  
  
}



shinyApp(ui, server)

只有我试图做的是在单击按钮后将 Start 和 Stop 保存为变量,以便在函数中使用它来生成_csv(df, start_v, stop_v) 作为参数。

谁能用简单的方式解释我如何做到这一点?

【问题讨论】:

    标签: r shiny


    【解决方案1】:

    一种解决方案使用eventReactive。它创建一个计算值,该值仅在响应事件时更新。在这种情况下,单击您的按钮。这提供了一个您可以在renderDataTable 中使用的数据框。任何用于过滤数据框的代码都会移动到名为 dfeventReactive

    myDat <- data.frame(A = 1:3, B = LETTERS[1:3]) # dummy data for testing
    
    ui <- fluidPage(
      titlePanel("Skrypt"),
      
      DT::dataTableOutput("table"),
      
      numericInput("Start", "Start", 1),
      verbatimTextOutput("v1"),
      
      numericInput("Stop", "Stop", 2),
      verbatimTextOutput("v"),
      
      actionButton("button", "Generate For Range")
      
    )
    
    server <-  function(input, output) {
      df <- eventReactive(input$button, {
        
        # Test if filter is valid
        if (input$Start >= input$Stop) stop("Start cannot be larger or equal than stop")
        if (input$Start < min(myDat$A)) stop("Start cannot be less than smallest value")
        if (input$Stop > max(myDat$A)) stop("Stop cannot be larger than largest value")
        
        myDat[input$Start:input$Stop,] # use any filter you deem necessary
      })
      
      
      # Filter data based on selections
      output$table <- DT::renderDataTable({
        d <- DT::datatable(
          data <- df()
        )
      })
      
      
    }
    
    
    shinyApp(ui, server)
    

    【讨论】:

    • 好的,现在我可以在我认为的功能中使用开始,停止。非常感谢Jan的解释! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-07
    • 2017-02-09
    • 1970-01-01
    • 2014-06-19
    • 2020-01-02
    • 1970-01-01
    相关资源
    最近更新 更多