问题描述
我的闪亮仪表盘中有五个选项卡。这五个选项卡中的四个都有自己的表。这些表中的每个表都彼此不同,并且具有不同的日期范围。我想拥有一个选项,当用户在选项卡之一中输入日期输入时,它不会影响其他表及其输入范围。但是,下面的代码不是这种情况。如果我在第一个标签中选择了日期范围,则会影响其他标签中显示的日期。这是我的下面的代码
#ui.R
#----
# Header -----------------------------------------------------------------------|
header<-dashboardHeader( title = "Marketing Dashboard"
)
# Sidebar ----------------------------------------------------------------------|
sidebar<-dashboardSidebar(
sidebarMenu(
menuItem("Overview",tabName ="overview",icon = icon("dashboard")),menuItem("User",tabName ="user",icon = icon("user")),menuItem("Behavior",tabName ="behavior",icon = icon("people-carry")),menuItem("Finance",tabName ="finance",icon = icon("piggy-bank")),menuItem("Weather",tabName ="weather",icon = icon("bolt"))
)
)
# Body -------------------------------------------------------------------------|
body<-dashboardBody(theme = "solar.css",tabItems(
tabItem(tabName = "overview",fluidRow(
daterangeInput("date",label = 'Date range input',start = range(tib1$start_time)[2] - 7,end = range(tib1$start_time)[2],min = range(tib1$start_time)[1],max = range(tib1$start_time)[2]
)
),fluidRow(
DT::dataTableOutput("overviewtable")
)
),tabItem(tabName = 'user',fluidRow(
daterangeInput("date",start = range(tib2$end_time)[2] - 7,end = range(tib2$end_time)[2],min = range(tib2$end_time)[1],max = range(tib2$end_time)[2]
)
),fluidRow(
DT::dataTableOutput("usertable")
)
),tabItem(tabName = 'behavior',start = range(tib3$start_time)[2] - 7,end = range(tib3$start_time)[2],min = range(tib3$start_time)[1],max = range(tib3$start_time)[2]
)
),fluidRow(
DT::dataTableOutput("behaviortable")
)
),tabItem(tabName = 'finance',start = range(tib4$start_time)[2] - 7,end = range(tib4$start_time)[2],min = range(tib4$start_time)[1],max = range(tib4$start_time)[2]
)
),fluidRow(
DT::dataTableOutput("financetable")
)
),tabItem(tabName = 'weather',fluidRow(
tags$iframe(
seamless = "seamless",src = "personal",height = 800,width = 1400
)
)
)
)
)
# UI ---------------------------------------------------------------------------|
ui = dashboardPage(
header,sidebar,body
)
# server.R
#---------
server <- function(input,output){
#Reactive for daterangeInput in overview
overviewdata<- reactive({
filter(tib1,between(start_time,input$date[1],input$date[2]))
})
#Table for overview
output$overviewtable<- DT::renderDataTable({
DT::datatable(data =overviewdata(),extensions = 'Buttons',options = list(
dom = "Blfrtip",buttons =
list("copy",list(
extend = "collection",buttons = c("csv","excel","pdf"),text ="Download"
))#End of button customization
))
})
#User Section -----------------------------------------------------------------|
userdata<- reactive({
filter(tib2,between(end_time,input$date[2]))
})
#Table for user
output$usertable<- DT::renderDataTable({
DT::datatable(data =userdata(),text ="Download"
))#End of button customization
))
})
#Behavior section -------------------------------------------------------------|
behaviordata<- reactive({
filter(tib3,input$date[2]))
})
#Table for overview
output$behaviortable<- DT::renderDataTable({
DT::datatable(data = behaviordata(),text ="Download"
))#End of button customization
))
})
#Finance section -------------------------------------------------------------|
financedata<- reactive({
filter(tib4,input$date[2]))
})
#Table for overview
output$financetable<- DT::renderDataTable({
DT::datatable(data = financedata(),text ="Download"
))#End of button customization
))
})
}
我一直在网上寻找答案,并将继续在网上寻找答案,但是我没有看到与该问题完全相关的信息。有没有办法在dateInputerange上放置一个ID,以便服务器端的reactive({})
函数将知道dateinpute范围是来自选项卡1、2等。
解决方法
您的dateRangeInput将inputId作为参数。您可以分配不同的ID,例如date_user,date_finance等,而不只是“ date”。然后,在该选项卡中进行过滤时,您将引用每个单独的date_id。另外,您可以使用ns
函数构建一个可以多次调用的module:
#ui.R
#----
# Header -----------------------------------------------------------------------|
header<-dashboardHeader( title = "Marketing Dashboard"
)
# Sidebar ----------------------------------------------------------------------|
sidebar<-dashboardSidebar(
sidebarMenu(
menuItem("Overview",tabName ="overview",icon = icon("dashboard")),menuItem("User",tabName ="user",icon = icon("user")),menuItem("Behavior",tabName ="behavior",icon = icon("people-carry")),menuItem("Finance",tabName ="finance",icon = icon("piggy-bank")),menuItem("Weather",tabName ="weather",icon = icon("bolt"))
)
)
# Body -------------------------------------------------------------------------|
body<-dashboardBody(theme = "solar.css",tabItems(
tabItem(tabName = "overview",fluidRow(
dateRangeInput("date_overview",label = 'Date range input',start = range(tib1$start_time)[2] - 7,end = range(tib1$start_time)[2],min = range(tib1$start_time)[1],max = range(tib1$start_time)[2]
)
),fluidRow(
DT::dataTableOutput("overviewtable")
)
),tabItem(tabName = 'user',fluidRow(
dateRangeInput("date_user",start = range(tib2$end_time)[2] - 7,end = range(tib2$end_time)[2],min = range(tib2$end_time)[1],max = range(tib2$end_time)[2]
)
),fluidRow(
DT::dataTableOutput("usertable")
)
),tabItem(tabName = 'behavior',fluidRow(
dateRangeInput("date_behaviour",start = range(tib3$start_time)[2] - 7,end = range(tib3$start_time)[2],min = range(tib3$start_time)[1],max = range(tib3$start_time)[2]
)
),fluidRow(
DT::dataTableOutput("behaviortable")
)
),tabItem(tabName = 'finance',fluidRow(
dateRangeInput("date_finance",start = range(tib4$start_time)[2] - 7,end = range(tib4$start_time)[2],min = range(tib4$start_time)[1],max = range(tib4$start_time)[2]
)
),fluidRow(
DT::dataTableOutput("financetable")
)
),tabItem(tabName = 'weather',fluidRow(
tags$iframe(
seamless = "seamless",src = "personal",height = 800,width = 1400
)
)
)
)
)
# UI ---------------------------------------------------------------------------|
ui = dashboardPage(
header,sidebar,body
)
# server.R
#---------
server <- function(input,output){
#Reactive for dateRangeInput in overview
overviewdata<- reactive({
filter(tib1,between(start_time,input$date_overview[1],input$date_overview[2]))
})
#Table for overview
output$overviewtable<- DT::renderDataTable({
DT::datatable(data =overviewdata(),extensions = 'Buttons',options = list(
dom = "Blfrtip",buttons =
list("copy",list(
extend = "collection",buttons = c("csv","excel","pdf"),text ="Download"
))#End of button customization
))
})
#User Section -----------------------------------------------------------------|
userdata<- reactive({
filter(tib2,between(end_time,input$date_user[1],input$date_user[2]))
})
#Table for user
output$usertable<- DT::renderDataTable({
DT::datatable(data =userdata(),text ="Download"
))#End of button customization
))
})
#Behavior section -------------------------------------------------------------|
behaviordata<- reactive({
filter(tib3,input$date_behaviour[1],input$date_behaviour[2]))
})
#Table for overview
output$behaviortable<- DT::renderDataTable({
DT::datatable(data = behaviordata(),text ="Download"
))#End of button customization
))
})
#Finance section -------------------------------------------------------------|
financedata<- reactive({
filter(tib4,input$date_finance[1],input$date_finance[2]))
})
#Table for overview
output$financetable<- DT::renderDataTable({
DT::datatable(data = financedata(),text ="Download"
))#End of button customization
))
})
}