Выбор входных данных, которые не обновляются корректно в R

#r #shiny

#r #блестящий

Вопрос:

Я работаю с набором данных, содержащим гораздо больше строк, вот фрагмент его кода. Я хочу, чтобы приложение правильно отображало строки, поэтому BMW PETROL 1 покажет: топливо = бензин, миль на галлон = 30, цвет = красный, а BMW PETROL 2 покажет бензин, 40, синий. и т. Д

Но при переключении между BMW бензиновыми 1 и 2, он не обновляется корректно. Кажется, что проблема возникает из-за «бензина», существующего в обеих строках.

Я думал о выполнении оператора if / else, но я думаю, что это стало бы слишком сложным, поскольку у меня много строк с несколькими входами для бензина / дизеля. Мне также не нужна кнопка, которая сбрасывает все это, я бы хотел, чтобы она менялась по мере выбора пользователем транспортного средства.

(Я не смог найти пример с такой же проблемой, но, пожалуйста, пришлите мне все, что я, возможно, пропустил!)

Код:

 library(shiny)
Data2 <- data.frame(Vehicle= c("BMW PETROL 1", "BMW PETROL 2", "BMW DIESEL" ), 
                    Fuel_type= c("Petrol", "Petrol", "Diesel"),
                    mpg =c(30, 40, 35), 
                    colour = c("red", "blue", "red"))
ui <- fluidPage(
  useShinyjs(),
  tags$head(
    tags$style(
      HTML("        #div_id .selectize-control.single .selectize-input:after{content: none;}"
           ),
      " #container * {display: inline;}"
      )
    ),
  sidebarPanel( radioButtons("Radiobutton", "Choose the vehicle", Data2$Vehicle, selected = 1),
                tags$div(id= "div_id",
                         selectizeInput("Select1", "Fuel type", choices= NULL),
                         selectizeInput("Select2", "WLTP mpg", choices= NULL),
                         selectizeInput("Select3", "colour", choices= NULL)
                         )
                )
  )

server <- function(input, output, session){

  observeEvent(input$Radiobutton,{
    updateSelectizeInput(session,'Select1',
                         choices = sort(unique(Data2$Fuel_type[Data2$Vehicle == input$Radiobutton])))
    
  })
  observeEvent(input$Select1,{
    updateSelectizeInput(session,'Select2',
                         choices = sort(unique(Data2$mpg[Data2$Vehicle == input$Radiobutton amp;
                                                           Data2$Fuel_type == input$Select1 ])))
    
  })
  observeEvent(input$Select2,{
    updateSelectizeInput(session,'Select3',
                         choices= sort(unique(Data2$colour[Data2$Vehicle == input$Radiobutton amp;
                                                          Data2$Fuel_type == input$Select1 amp;
                                                          Data2$mpg == input$Select2])))
  })
  
  
}
shinyApp(ui = ui, server = server)
 

Ответ №1:

У вас возникла эта проблема, потому что при переключении между BMW PETROL 1 и BMW PETROL 2 значение input$Select1 не меняется. Таким observeEvent(input$Select1) образом, он не запускается.

Вы можете добавить событие input$Radiobutton в observeEvent , чтобы преодолеть это.

   observeEvent({input$Select1
               input$Radiobutton},{
    updateSelectizeInput(session,'Select2',
                         choices = sort(unique(Data2$mpg[Data2$Vehicle == input$Radiobutton amp;
                                                           Data2$Fuel_type == input$Select1 ])))
    
  })
 

Комментарии:

1. Большое вам спасибо!