#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. Большое вам спасибо!