下面我提供了我正在尝试创建的闪亮仪表板的框架。我已经为此奋斗了很长一段时间,但不知道如何让它发挥作用。
应用程序当前行为: 现在,选择菜单项 1 侧边栏项目时,“选择日期范围”日期输入可见。
期望的行为:我希望“选择日期范围”输入仅在同时选择“菜单项 1”和“选项卡 1”时才可见。
library(shiny)
library(shinydashboard)
library(shinyWidgets)
library(lubridate)
generate_dates <- function(start_date, end_date) {
all_dates <- seq(start_date, end_date, by = "days")
all_mondays <- all_dates[weekdays(all_dates) == "Monday"]
return(all_mondays)
}
start_date <- floor_date(as.Date("2023-07-01"), unit = "week", week_start = 1)
end_date <- floor_date(as.Date("2023-12-06"), unit = "week", week_start = 1)
dates <- generate_dates(start_date, end_date)
df <- data.frame(
Week = dates,
Value_1 = sample(c("A", "B", "C", "D"), length(dates), replace = TRUE),
Value_2 = sample(c("X", "Y", "Z", "W"), length(dates), replace = TRUE)
)
sidebar <- dashboardSidebar(
sidebarMenu(
id= "sidebarID",
conditionalPanel(
condition="input.sidebarID =='menu1'",
dateRangeInput("complaints_date_range","Select Date Range",
start=max(df$Week),
end=max(df$Week),
min=max(df$Week),
max=max(df$Week),
format="yyyy-mm-dd"
)
),
menuItem("Menu Item 1",tabName="menu1"),
menuItem("Menu Item 2",tabName="menu2")
)
)
body<- dashboardBody(
tabItems(
tabItem(tabName="menu1",
tabsetPanel(
tabPanel("Tab 1"),
tabPanel("Tab 2")
)),
tabItem(tabName="menu2")
)
)
ui<-dashboardPage(
dashboardHeader(title="Navigation"),
sidebar,
body
)
server<-function(input,output,session){
}
shinyApp(ui,server)
我尝试了许多不同的尝试,涉及条件面板中的不同条件,但没有任何效果。
如果你的内部标签有一个ID
body<- dashboardBody(
tabItems(
tabItem(tabName="menu1",
tabsetPanel(id="innerTab",
tabPanel("Tab 1"),
tabPanel("Tab 2")
)),
tabItem(tabName="menu2")
)
)
然后在渲染的条件下使用它
conditionalPanel(
condition="input.sidebarID =='menu1' & input.innerTab=='Tab 1'",
...
)
library(shiny)
library(shinydashboard)
library(shinyWidgets)
library(lubridate)
generate_dates <- function(start_date, end_date) {
all_dates <- seq(start_date, end_date, by = "days")
all_mondays <- all_dates[weekdays(all_dates) == "Monday"]
return(all_mondays)
}
start_date <- floor_date(as.Date("2023-07-01"), unit = "week", week_start = 1)
end_date <- floor_date(as.Date("2023-12-06"), unit = "week", week_start = 1)
dates <- generate_dates(start_date, end_date)
df <- data.frame(
Week = dates,
Value_1 = sample(c("A", "B", "C", "D"), length(dates), replace = TRUE),
Value_2 = sample(c("X", "Y", "Z", "W"), length(dates), replace = TRUE)
)
sidebar <- dashboardSidebar(
sidebarMenu(
id = "sidebarID",
conditionalPanel(
condition = "input.sidebarID === 'menu1' && input.tabsetID === 'tab1'",
dateRangeInput("complaints_date_range", "Select Date Range",
start = max(df$Week),
end = max(df$Week),
min = max(df$Week),
max = max(df$Week),
format = "yyyy-mm-dd"
)
),
menuItem("Menu Item 1", tabName = "menu1"),
menuItem("Menu Item 2", tabName = "menu2")
)
)
body <- dashboardBody(
tabItems(
tabItem(tabName = "menu1",
tabsetPanel(
id = "tabsetID", # add ID to the tabsetPanel
tabPanel("Tab 1", value = "tab1"), # add value to Tab 1
tabPanel("Tab 2", value = "tab2") # add value to Tab 2
)
),
tabItem(tabName = "menu2")
)
)
ui <- dashboardPage(
dashboardHeader(title = "Navigation"),
sidebar,
body
)
server <- function(input, output, session) {
}
shinyApp(ui,server)