如何根据 Shiny 中的文本输入更新 SelectizeInput
How to update a SelectizeInput depending on a textInput in Shiny
我创建了一个包含 textInput
和 selectizeInput
的应用程序。根据用户的输入,如果输入可以在一个数据集中找到,您将根据 selectizeInput
.
中的 textInput
看到所有可能性。
这样,如果用户输入了一个不在数据集中的词,selectizeInput
就无法显示任何选择。
一切正常,但我发现了一个问题。如果用户开始写一个正确的单词,用户会得到一个下拉列表……然后,如果输入被删除……下拉列表仍然存在(来自 selectizeInput
的选择仍然存在)。
这里是代码:
library(shiny)
library(dplyr)
library(stringr)
ui <- fluidPage(
textInput("my_input", "Introduce a word"),
selectizeInput(inputId = "dropdown_list", label = "Choose the variable:", choices=character(0)),
)
server <- function(input, output, session) {
my_list <- reactive({
req(input$my_input)
data <- as.data.frame(storms)
res <- subset(data, (grepl(pattern = str_to_sentence(input$my_input), data$name))) %>%
dplyr::select(name)
res <- as.factor(res$name)
return(res)
})
# This is to generate the choices (gene list) depending on the user's input.
observeEvent(input$my_input, {
updateSelectizeInput(
session = session,
inputId = "dropdown_list",
choices = my_list(), options=list(maxOptions = length(my_list())),
server = TRUE
)
})
}
shinyApp(ui, server)
你知道如果用户删除了输入,我如何从 selectizeInput
中删除选项?
非常感谢
此致
问题是req(input$myinput)
。因此,如果用户删除输入 my_list()
则不会更新。您可以使用 if
来检查输入是否等于空字符串,而不是 req
:
my_list <- reactive({
if (!input$my_input == "") {
data <- as.data.frame(storms)
res <- subset(data, grepl(pattern = str_to_sentence(input$my_input), data$name), name)
res <- as.factor(res$name)
return(res)
}
})
我创建了一个包含 textInput
和 selectizeInput
的应用程序。根据用户的输入,如果输入可以在一个数据集中找到,您将根据 selectizeInput
.
textInput
看到所有可能性。
这样,如果用户输入了一个不在数据集中的词,selectizeInput
就无法显示任何选择。
一切正常,但我发现了一个问题。如果用户开始写一个正确的单词,用户会得到一个下拉列表……然后,如果输入被删除……下拉列表仍然存在(来自 selectizeInput
的选择仍然存在)。
这里是代码:
library(shiny)
library(dplyr)
library(stringr)
ui <- fluidPage(
textInput("my_input", "Introduce a word"),
selectizeInput(inputId = "dropdown_list", label = "Choose the variable:", choices=character(0)),
)
server <- function(input, output, session) {
my_list <- reactive({
req(input$my_input)
data <- as.data.frame(storms)
res <- subset(data, (grepl(pattern = str_to_sentence(input$my_input), data$name))) %>%
dplyr::select(name)
res <- as.factor(res$name)
return(res)
})
# This is to generate the choices (gene list) depending on the user's input.
observeEvent(input$my_input, {
updateSelectizeInput(
session = session,
inputId = "dropdown_list",
choices = my_list(), options=list(maxOptions = length(my_list())),
server = TRUE
)
})
}
shinyApp(ui, server)
你知道如果用户删除了输入,我如何从 selectizeInput
中删除选项?
非常感谢
此致
问题是req(input$myinput)
。因此,如果用户删除输入 my_list()
则不会更新。您可以使用 if
来检查输入是否等于空字符串,而不是 req
:
my_list <- reactive({
if (!input$my_input == "") {
data <- as.data.frame(storms)
res <- subset(data, grepl(pattern = str_to_sentence(input$my_input), data$name), name)
res <- as.factor(res$name)
return(res)
}
})