如何使用循环去抖多个输入?

How to debounce multiple inputs using a loop?

我使用循环创建了很多文本输入:

lapply(1:5, function(x){textInput(paste0('text',x), label = '')}) 

我现在有 input$text1input$text2input$text3 等...
我怎样才能使用循环去抖动它们?
现在的想法是将对象命名为 debounced_text1debounced_text2 等。

以下无效:

lapply(1:5, function(x){
  
  assign(paste0('debounced_text',x),debounce(r = input[[paste0('text',x)]], millis = 1000), envir = .GlobalEnv) 
  
})

我也试过使用 get()

debounce(r = get(paste0('input$text',x), millis = 1000) 

但是这样使用 get() 是行不通的。
提前致谢!

debounce 需要反应式表达式 - 请检查以下内容。

分别对每个输入去抖:

library(shiny)

textInputIDs <- paste0('text', 1:5)

ui <- fluidPage(
  lapply(textInputIDs, function(x){textInput(x, label = x)}),
  textOutput("debouncedText")
)

server <- function(input, output, session) {
  lapply(textInputIDs, function(x){assign(paste0("debounced_", x), debounce(r = reactive({input[[x]]}), 1000), envir = .GlobalEnv)})
  
  output$debouncedText <- renderText({
    paste("User input:", debounced_text1(), debounced_text2(), debounced_text3(), debounced_text4(), debounced_text5(), sep = ", ")
  })
}

shinyApp(ui, server)

另一种方法是将所有输入包装在一个 reactive 中,其中 returns 一个 list() 并且仅对这个反应进行去抖动。

去抖捆绑输入:

library(shiny)

textInputIDs <- paste0('text', 1:5)

ui <- fluidPage(
  lapply(textInputIDs, function(x){textInput(x, label = x)}),
  textOutput("debouncedText")
)

server <- function(input, output, session) {
  
  debouncedInputs <- debounce(r = reactive({lapply(textInputIDs, function(x){input[[x]]})}), 1000)
  
  output$debouncedText <- renderText({
    paste("User input:", paste(debouncedInputs(), collapse = ", "))
  })
}

shinyApp(ui, server)