Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R闪亮-尝试使用反应和动作按钮循环_R_Loops_Shiny_Reactive - Fatal编程技术网

R闪亮-尝试使用反应和动作按钮循环

R闪亮-尝试使用反应和动作按钮循环,r,loops,shiny,reactive,R,Loops,Shiny,Reactive,我的闪亮应用程序中有10个动作按钮。我试图创建一个循环,但我遇到了反应值的问题。我该怎么解决呢 以下是按钮1的代码: server <- function(input, output, session) { value1 <- reactiveVal(0) observeEvent(input$minus1, {newValue1 <- value1() - 1) value1(newValue1)}) observeEvent(inp

我的闪亮应用程序中有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我过去曾基于以下内容制作过类似的演示:

这将生成10个加号和10个减号按钮,每个按钮将增加或减少反应值。我希望这可能会有所帮助

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)
库(闪亮)
图书馆(dplyr)

ui您好,您应该看看,它们降低了在输入名称之间丢失的风险,并且有助于创建循环。对于
循环,请使用
lappy
以编程方式启动
observeEvent
s。比如,
lappy(1:10,函数(i){……})
非常感谢!工作完美。
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)