#r #shiny #shinydashboard
#r #блестящий #shinydashboard
Вопрос:
В приведенном ниже блестящем коде мне нужно вернуться к dashboardBody () «Вы выбрали «имя»», используя выбранный идентификатор меню. Улучшение текущего кода будет оценено по достоинству, я изучаю и переношу свой проект R Script на Shiny.
library(shiny)
library(shinydashboard)
labels = data.frame(id = c(seq.int(nrow(mtcars))),
name = c(rownames(mtcars)))
##### UI #####
ui <- dashboardPage(
dashboardHeader(title = "Example"),
dashboardSidebar(
sidebarMenu(id="mytabs",
sidebarMenuOutput("menu"))
),
dashboardBody()
)
##### SERVER #####
server <- function(input, output, session) {
output$menu <- renderMenu({
myTabs = lapply(1:nrow(labels) , function(i) {
menuItem(labels$name[i], tabName = labels$id[i])
})
do.call(sidebarMenu, myTabs)
})
}
##### Run the application #####
shinyApp(ui = ui, server = server)
Ответ №1:
Это может быть достигнуто следующим образом:
- Вы можете получить идентификатор выбранного пункта меню с помощью
input$mytabs
и - метка через
labels$name[as.integer(input$mytabs)]
library(shiny)
library(shinydashboard)
labels = data.frame(id = c(seq.int(nrow(mtcars))),
name = c(rownames(mtcars)))
##### UI #####
ui <- dashboardPage(
dashboardHeader(title = "Example"),
dashboardSidebar(
sidebarMenu(id="mytabs",
sidebarMenuOutput("menu"))
),
dashboardBody(
textOutput("text")
)
)
##### SERVER #####
server <- function(input, output, session) {
output$menu <- renderMenu({
myTabs = lapply(1:nrow(labels) , function(i) {
menuItem(labels$name[i], tabName = labels$id[i])
})
do.call(sidebarMenu, myTabs)
})
output$text <- reactive({
req(input$mytabs)
paste("You chose", labels$name[as.integer(input$mytabs)])
})
}
##### Run the application #####
shinyApp(ui = ui, server = server)