tabName作为字符串放入时出现,但在R SHINY中不作为变量出现

时间:2017-09-29 21:12:18

标签: r shiny

我正在尝试为不同的标签创建一个不同主体的仪表板。但是,以下代码不起作用。创建选项卡时,选项卡中不显示任何内容。如果我将tabName更改为字符串(例如menuItem(name_dataset [1],tabName =" data1")),则右侧正文内容将显示在每个选项卡中。

这是为什么?为什么我不能将变量用于tabName而不仅仅是原始字符串?

#SHINY DASHBOARD: UI 
header <- dashboardHeader()

sidebar <- dashboardSidebar(
    sidebarMenu(
    menuItem(name_datasets[1], tabName = name_datasets[1]),
    menuItem(name_datasets[2], tabName = name_datasets[2])
    )
)

body <- dashboardBody(
    tabItems(
    #First tab
        tabItem(tabName = name_datasets[1], h2(name_datasets[1])),

    #Second tab
    tabItem(tabName = name_datasets[2], h2(name_datasets[2]))
    )
)

ui <- dashboardPage(header, sidebar, body)

1 个答案:

答案 0 :(得分:1)

我敢打赌,你的name_datasets向量包含带空格或其他保留字符的字符串。 tabName参数(无论是否直接提供)应该是一个简单而唯一的密钥,因此它不应包含空格,&符号,百分比等...

您可以在没有“怪异”字符的情况下验证此作品:

library(shiny)
library(shinydashboard)

name_datasets <- c(a = "letter_a1", b = "letter_b2")

sidebar <- dashboardSidebar(
  sidebarMenu(id = "tabs",
    menuItem(name_datasets[1], tabName = name_datasets[1]),
    menuItem(name_datasets[2], tabName = name_datasets[2])
  )
)

body <- dashboardBody(
  tabItems(
    tabItem(tabName = name_datasets[1], h2(name_datasets[1])),
    tabItem(tabName = name_datasets[2], h2(name_datasets[2]))
  )
)

ui <- dashboardPage(dashboardHeader(), sidebar, body)
server <- function(input, output, session) {}

shinyApp(ui, server)

但是,如果您确实希望向最终用户显示空格或美元符号或“奇怪”的东西,您仍然可以这样做(因为tabName仅在内部使用)。例如,这是与最后一个应用程序非常相似的应用程序,但您会注意到即使tabName非常简单("a""b"),显示的内容也是如此侧边栏和主体中的用户要复杂得多:

library(shiny)
library(shinydashboard)

name_datasets <- c(a = "letter $ % a1", b = "letter b2 % $")

sidebar <- dashboardSidebar(
  sidebarMenu(id = "tabs",
    menuItem(name_datasets[1], tabName = names(name_datasets)[1]),
    menuItem(name_datasets[2], tabName = names(name_datasets)[2])
  )
)

body <- dashboardBody(
  tabItems(
    tabItem(tabName = names(name_datasets)[1], h2(name_datasets[1])),
    tabItem(tabName = names(name_datasets)[2], h2(name_datasets[2]))
  )
)

ui <- dashboardPage(dashboardHeader(), sidebar, body)
server <- function(input, output, session) {}

shinyApp(ui, server)