Вероятно, очень простой c вопрос - но не могу перевести похожие сообщения, которые я нашел, на мою точную проблему.
В приложении R Shiny у меня есть первое раскрывающееся меню, которое заполняется вектором, созданным на сервере - это позволяет мне сделать один набор вариантов.
Я хочу иметь поле для галочки, которое затем вводит второй раскрывающийся список, но я хочу, чтобы этот раскрывающийся список исчез, если я не -поставьте галочку.
У меня был go - см. MWE ниже - график нужен только для того, чтобы сохранить структуру моего исходного кода (очевидно, я знаю, что мои раскрывающиеся списки ничего, но это не тот случай в оригинале, но хотелось, чтобы MWE был как можно более "M").
Если я удалю строку removeUI()
, то при установке флажка будет создан новый раскрывающийся список по мере необходимости, но затем снятие флажка не приведет к его удалению.
Мне явно чего-то не хватает; любая помощь, которую я очень ценю, так как я полностью отстой в R Shiny, но действительно хочу поправиться!
library(shiny)
library(shinyMobile)
# define UI elements
ui <- f7Page(
f7SingleLayout(
navbar = f7Navbar(
),
f7Card(htmlOutput("initial_drop_down"), #first drop down
f7checkBox(inputId = "switch", label = "Introduce second choice", FALSE), #tick box for second drop down if required
htmlOutput("reactive_drop_down") #second drop down
),
f7Shadow(
intensity = 16,
f7Card(
plotOutput("distPlot", height = "800px") # plot - originally linked to drop down choices but an arbitrary graph here for simplicity
)
)
)
)
# server calculations
server <- function(input, output) {
library(ggplot2)
# generate first drop down - done on server side since usually choices vector is comprised of information read in from files
output$initial_drop_down = renderUI({
selectInput(inputId = "initial_choice",
label = "First choice:",
choices = c("Choice 1", "Choice 2", "Choice 3"))
})
observeEvent(input$initial_choice, {
# trying to add second drop down based on action in switch - not convinced my use of observeEvent is quite right - issue likely sits in here.
observeEvent(input$switch, {
if(input$switch == T){
output$reactive_drop_down = renderUI({
selectInput(inputId = "second_choice",
label = "Second (dynamic) choice:",
choices = c(1,2,3))
})
}else{
removeUI(selector ="#reactive_drop_down")
}
})
output$distPlot <- renderPlot({
ggplot(data = cars) + geom_line(aes(x=speed, y=dist))
})
})
}
# Run the application
shinyApp(ui = ui, server = server)