#r #shiny #htmlwidgets
#r #блестящий #htmlwidgets
Вопрос:
Я ищу решение для многоуровневого выпадающего списка в R shiny
Я просмотрел большинство пакетов здесь, https://github.com/nanxstats/awesome-shiny-extensions Не удалось найти решение ни в одном из доступных пакетов
Близким решением является
# selectInput("state", "Choose a word:", width = 400,
# list(`Building` = list("Apartment"="ap", "Bank"="bk", "Hospital"="hp"),
# `Nature` = list("Bank"="bk1", "River"="rv", "Orange"="or"),
# `Color` = list("Blue"="bl", "Orange"="or1", "Red"="rd"))
За исключением того, что, когда список очень длинный, им очень сложно управлять
ps. вопрос и изображение взяты из https://github.com/rstudio/shiny/issues/2729
Комментарии:
1. Что должен делать такой виджет? Когда вы нажимаете на элемент, что вы хотите?
2. Смотрите пример в главном сообщении
3. Дерево флажков не подходит? См. jsTreeR .
4. На самом деле нет. Мне нужно выбрать один из них в данный момент. Также это выглядит не очень красиво.
5. Это не проблема. Вы можете выбрать один из них за раз с помощью ‘jsTreeR’.
Ответ №1:
Я только что сделал посылку. Он использует библиотеку JavaScript jquery-ContextMenu. Чтобы установить его:
remotes::install_github("stla/NestedMenu")
Обратите внимание, что на данный момент это всего лишь черновик.
Пример использования:
library(NestedMenu)
library(shiny)
cities <- list(
europe = list(
name = "Europe",
items = list(
france = list(
name = "France",
items = list(
paris = list(name = "Paris"),
lyon = list(name = "Lyon")
)
),
italy = list(
name = "Italy",
items = list(
roma = list(name = "Roma"),
milano = list(name = "Milano")
)
)
)
),
america = list(
name = "America",
items = list(
namerica = list(
name = "North America",
items = list(
usa = list(
name = "USA",
items = list(
chicago = list(name = "Chicago"),
newyork = list(name = "New York")
)
),
canada = list(
name = "Canada",
items = list(
ottawa = list(name = "Ottawa"),
toronto = list(name = "Toronto")
)
)
)
),
samerica = list(
name = "South America",
items = list(
brazil = list(
name = "Brazil",
items = list(
brasilia = list(name = "Brasilia"),
saopolo = list(name = "Sâo Polo")
)
),
mexico = list(
name = "Mexico",
items = list(
mexicocity = list(name = "Mexico City"),
tijuana = list(name = "Tijuana")
)
)
)
)
)
)
)
ui <- fluidPage(
br(),
NestedMenuOutput("menu", height = "auto"),
br(),
verbatimTextOutput("clicked")
)
server <- function(input, output, session){
output[["menu"]] <- renderNestedMenu({
NestedMenu(
"Cities", items = cities
)
})
output[["clicked"]] <- renderPrint({
input[["menu"]]
})
}
shinyApp(ui, server)
Комментарии:
1. Merci beaucoup. Я проверю это как можно скорее и вернусь!