如何使用循环去抖多个输入?
How to debounce multiple inputs using a loop?
我使用循环创建了很多文本输入:
lapply(1:5, function(x){textInput(paste0('text',x), label = '')})
我现在有 input$text1
、input$text2
、input$text3
等...
我怎样才能使用循环去抖动它们?
现在的想法是将对象命名为 debounced_text1
、debounced_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)
我使用循环创建了很多文本输入:
lapply(1:5, function(x){textInput(paste0('text',x), label = '')})
我现在有 input$text1
、input$text2
、input$text3
等...
我怎样才能使用循环去抖动它们?
现在的想法是将对象命名为 debounced_text1
、debounced_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)