R 动态更新在多个Select输入中使用的列表
与此相对简单的代码不起作用有关,我有以下问题: server.RR 动态更新在多个Select输入中使用的列表,r,shiny,R,Shiny,与此相对简单的代码不起作用有关,我有以下问题: server.R library(shiny) server <- function(input, output) { list_of_stuff=c("Car","Cat","Dog","Hat","Baby","Tractor") reactive_stuff_list <- eventReactive({list(input$select_1,input$select_2,input$select_3)},{
library(shiny)
server <- function(input, output) {
list_of_stuff=c("Car","Cat","Dog","Hat","Baby","Tractor")
reactive_stuff_list <- eventReactive({list(input$select_1,input$select_2,input$select_3)},{
selection_1=input$select_1
selection_2=input$select_2
selection_3=input$select_3
list_of_stuff=list_of_stuff[! list_of_stuff %in% selection_1]
list_of_stuff=list_of_stuff[! list_of_stuff %in% selection_2]
list_of_stuff=list_of_stuff[! list_of_stuff %in% selection_3]
return(list_of_stuff)
})
output$select1 <- renderUI({
selectInput(inputId = "select_1", label = "Select some stuff",
choices=reactive_stuff_list(), selected = NULL, multiple = TRUE)
})
output$select2 <- renderUI({
selectInput(inputId = "select_2", label = "Select some stuff",
choices=reactive_stuff_list(), selected = NULL, multiple = TRUE)
})
output$select3 <- renderUI({
selectInput(inputId = "select_3", label = "Select some stuff",
choices=reactive_stuff_list(), selected = NULL, multiple = TRUE)
})
}
ui <- mainPanel(
uiOutput('select1'),
uiOutput('select2'),
uiOutput('select3')
)
库(闪亮)
服务器?updateSelectInput
是您的朋友吗。。。一个简单的例子:
stack.shiny <- function(){
dat_set <- mtcars
all_cars <- row.names(dat_set)
car_brands <- unique(stri_extract_first_words(all_cars))
server <- function(input, output, session) {
output$car_brands <- renderUI({
selectInput(inputId = 'select1', label = 'choose brand',
choices = car_brands)
})
output$cars <- renderUI({
selectInput(inputId = 'select2', label = 'choose car',
choices = all_cars)
})
observeEvent(input$select1, {
x <- input$select1
find_pat <- sprintf('^%s', x)
these_cars <- all_cars[grepl(find_pat, all_cars, perl = TRUE)]
# Can also set the label and select items
updateSelectInput(session, "select2",
choices = these_cars,
selected = NULL)
})
}
ui <- fluidPage(
uiOutput('car_brands'),
uiOutput('cars')
)
shinyApp(ui, server)
}
stack.shinny?updateSelectInput
是您在这里的朋友。。。一个简单的例子:
stack.shiny <- function(){
dat_set <- mtcars
all_cars <- row.names(dat_set)
car_brands <- unique(stri_extract_first_words(all_cars))
server <- function(input, output, session) {
output$car_brands <- renderUI({
selectInput(inputId = 'select1', label = 'choose brand',
choices = car_brands)
})
output$cars <- renderUI({
selectInput(inputId = 'select2', label = 'choose car',
choices = all_cars)
})
observeEvent(input$select1, {
x <- input$select1
find_pat <- sprintf('^%s', x)
these_cars <- all_cars[grepl(find_pat, all_cars, perl = TRUE)]
# Can also set the label and select items
updateSelectInput(session, "select2",
choices = these_cars,
selected = NULL)
})
}
ui <- fluidPage(
uiOutput('car_brands'),
uiOutput('cars')
)
shinyApp(ui, server)
}
stack.shinny代码的问题在于它的编写方式,所有selectInput
元素在每次输入更改时(即reactive\u stuff\u list()
更改时)都会重新呈现。重新呈现会将选择更改回NULL
,因为这是您在renderUI
中的selectInput
调用中设置的值
下面是一个通过在更新可用选项时保留当前输入来解决该问题的实现
库(闪亮)
服务器您的代码的问题在于它的编写方式,您的selectInput
元素在每次输入更改时(即当您的reactive\u stuff\u list()
更改时)都会重新呈现。重新呈现会将选择更改回NULL
,因为这是您在renderUI
中的selectInput
调用中设置的值
下面是一个通过在更新可用选项时保留当前输入来解决该问题的实现
库(闪亮)
服务器我接受这个答案,因为这是最适合我的。我把它改编成我的代码,它做得很好。我接受这个答案,因为这是最适合我的。我把它改编成我的代码,它做得很好。我测试了你的例子,但我不确定它是否符合我的需要。不过,我会继续玩updateSelectinput
,谢谢。谢谢。这是一个很好的建议,使用observeEvent
和updateSelectInput
。我测试了您的示例,但我不确定它是否符合我的要求。不过,我会继续玩updateSelectinput
,谢谢。谢谢。使用observeEvent
和updateSelectInput
是一个很好的建议。