【问题标题】:R Shiny: How to write loop for observeEventR Shiny:如何为observeEvent编写循环
【发布时间】:2017-02-23 15:00:28
【问题描述】:

我有以下代码。有没有办法将它写在循环或向量化语句中,如 lapply?在我的真实代码中,我有更多的画笔,所以这会很有帮助。谢谢。

忽略此行。只需要添加一些文本。

observeEvent(input$brush_1,{
  Res=brushedPoints(D(),input$brush_1,allRows = TRUE)
  vals$keeprows = Res$selected_
  })

observeEvent(input$brush_2,{
  Res=brushedPoints(D(),input$brush_2,allRows = TRUE)
  vals$keeprows = Res$selected_

})

observeEvent(input$brush_3,{
  Res=brushedPoints(D(),input$brush_3,allRows = TRUE)
  vals$keeprows = Res$selected_

})

observeEvent(input$brush_4,{
  Res=brushedPoints(D(),input$brush_4,allRows = TRUE)
  vals$keeprows = Res$selected_

})

observeEvent(input$brush_5,{
  Res=brushedPoints(D(),input$brush_5,allRows = TRUE)
  vals$keeprows = Res$selected_

})

observeEvent(input$brush_6,{
  Res=brushedPoints(D(),input$brush_6,allRows = TRUE)
  vals$keeprows = Res$selected_

})

observeEvent(input$brush_7,{
  Res=brushedPoints(D(),input$brush_7,allRows = TRUE)
  vals$keeprows = Res$selected_

})

observeEvent(input$brush_8,{
  Res=brushedPoints(D(),input$brush_8,allRows = TRUE)
  vals$keeprows = Res$selected_

})

observeEvent(input$brush_9,{
  Res=brushedPoints(D(),input$brush_9,allRows = TRUE)
  vals$keeprows = Res$selected_

})

observeEvent(input$brush_10,{
  Res=brushedPoints(D(),input$brush_10,allRows = TRUE)
  vals$keeprows = Res$selected_

})

observeEvent(input$brush_11,{
  Res=brushedPoints(D(),input$brush_11,allRows = TRUE)
  vals$keeprows = Res$selected_

})

observeEvent(input$brush_12,{
  Res=brushedPoints(D(),input$brush_12,allRows = TRUE)
  vals$keeprows = Res$selected_

})

【问题讨论】:

    标签: r loops shiny lapply


    【解决方案1】:

    observeEventlapply 中效果很好:

    library("shiny")
    ui <- fluidPage(
      fluidRow(
        column(
          width = 6,
          lapply(
            X = 1:6,
            FUN = function(i) {
              sliderInput(inputId = paste0("d", i), label = i, min = 0, max = 10, value = i)
            }
          )
        ),
        column(
          width = 6,
          verbatimTextOutput(outputId = "test")
        )
      )
    )
    server <- function(input, output){
    
      vals <- reactiveValues()
    
      lapply(
        X = 1:6,
        FUN = function(i){
          observeEvent(input[[paste0("d", i)]], {
            vals[[paste0("slider", i)]] <- input[[paste0("d", i)]]
          })
        }
      )
    
      output$test <- renderPrint({
        reactiveValuesToList(vals)
      })
    }
    shinyApp(ui = ui, server = server)
    

    编辑:对于以前版本的闪亮,在服务器中使用它(添加assign):

    lapply(
      X = 1:6,
      FUN = function(i){
        assign(
          paste0("obs", i),
          observeEvent(input[[paste0("d", i)]], {
            vals[[paste0("slider", i)]] <- input[[paste0("d", i)]]
          })
        )
      }
    )
    

    【讨论】:

    • 我发现此代码在 shiny_0.14.1(windows 7) 中有效,但在 shiny_0.13.1(Redhat) 中无效。您认为这与软件包版本或操作系统有关吗?
    • 在 shiny_0.13.1(Redhat,R 版本 3.1.3 )中,lapply 适用于 sliderInputs,但不适用于 observeEvents。
    • 我没有这个特定版本,我用闪亮的 0.13.2 (R 3.2.0, redhat) 测试过它可以工作,并且用闪亮的 0.12.2 (R 3.0.2, redhat) ) 它不起作用,但是通过我的编辑它起作用了。
    • 谢谢,我把它改成了for循环,它适用于所有版本。
    • 刚刚测试过—— lapply 在 for 循环似乎失败的地方工作得很好。一定和lapply的受保护函数环境有关。
    猜你喜欢
    • 2017-11-06
    • 2022-01-19
    • 2018-12-05
    • 2018-12-14
    • 2019-08-01
    • 2021-12-21
    • 2021-11-14
    • 1970-01-01
    • 2022-01-04
    相关资源
    最近更新 更多