R Shiny - 尝试使用响应式(Reactive)和 ActionButton 循环

标签 r loops shiny reactive

我的 Shiny 应用程序中有 10 个操作按钮。我正在尝试创建一个循环,但我遇到了无功值的问题。我该如何解决它?

这是我的按钮 1 的代码:

  server <- function(input, output, session)
  {

  value1 <- reactiveVal(0) 

   observeEvent(input$minus1, {newValue1 <- value1() - 1) 
    value1(newValue1)})

   observeEvent(input$plus1, {newValue1 <- (value1() + 1) 
    value1(newValue1)})

 output$value1 <- renderUI(actionBttn("result1", label = value1()))

  }

我尝试了这个,但似乎不起作用:

  server <- function(input, output, session)
  {

  for (i in 1:10)
  {
  paste0("value", i) <- reactiveVal(0) 

   observeEvent(input$paste0("minus",i), {paste0("newValue", i) <- (paste0("value", i,"()") - 1)
    paste0("value", i)(paste0("newValue", i))})

   observeEvent(input$paste0("plus",i), {newValue1 <- (paste0("value", i,"()") + 1) 
    paste0("value", i)(paste0("newValue", i))})

 output$paste0("value", i) <- renderUI(actionBttn(paste0("result", i), label = paste0("value", i,"()")))
  }

  }

最佳答案

我过去曾基于以下内容制作过类似的演示:

https://community.rstudio.com/t/one-observer-to-handle-any-number-of-buttons-in-shiny/6569/2

这会产生 10 个加号和 10 个减号按钮,每个按钮都会增加或减少 reactiveValues。我希望这会有所帮助。

library(shiny)
library(dplyr)

ui <- fluidPage(
  fluidRow(uiOutput("show_table"))
)

server <- function(input, output, session) {

  Data <- reactiveValues(
    Info = rep(0, 10)
  )

  observe({
    input_btn_p <- paste0("btn_p_", 1:10)
    lapply(input_btn_p, function(x){
       observeEvent(input[[x]], {
         i <- as.numeric(sub("btn_p_", "", x))
         Data$Info[i] <- Data$Info[i] + 1
       })
     })

    input_btn_m <- paste0("btn_m_", 1:10)
    lapply(input_btn_m, function(x){
      observeEvent(input[[x]], {
        i <- as.numeric(sub("btn_m_", "", x))
        Data$Info[i] <- Data$Info[i] - 1
      })
    })
  })

  display_table <- reactive({
    data.frame(value = Data$Info) %>%
      mutate(button1 = vapply(row_number(),
                             function(i){
                               actionButton(inputId = paste0("btn_p_", i), label = "Plus") %>% 
                                 as.character()
                             },
                             character(1)),
             button2 = vapply(row_number(),
                              function(i){
                                actionButton(inputId = paste0("btn_m_", i), label = "Minus") %>% 
                                  as.character()
                              },
                              character(1)))
  })

  output$show_table <- renderUI({
    display_table() %>% 
      select(value, button1, button2) %>% 
      knitr::kable(format = "html", escape = FALSE) %>% 
      HTML()
  })

}

shinyApp(ui, server)

关于R Shiny - 尝试使用响应式(Reactive)和 ActionButton 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61243057/

相关文章:

r - 如何在 Shiny 的模块中禁用和启用 react 性?

git - R包开发中如何使用git?

r - global.R 不启动

java - 如何检查一个数组中的多个重复项? [准备Java]

java - 计算文件中多组 int 值

r - 动态创建带有 Shiny 绘图的选项卡,而无需重新创建现有选项卡

r - 将 json/data 传递给 Shiny 的 javascript 对象

r - 如何使用R将每小时乘客OD数据传输到od矩阵

r - 使用 R 更改光栅投影

android - 如何制作 ViewPager 循环?