Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.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 动态更新在多个Select输入中使用的列表_R_Shiny - Fatal编程技术网

R 动态更新在多个Select输入中使用的列表

R 动态更新在多个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)},{

与此相对简单的代码不起作用有关,我有以下问题:

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)},{

    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
是一个很好的建议。