#r #shiny
Вопрос:
Не могли бы вы, пожалуйста, помочь мне настроить два tabPanel
, которые я вставил в свой код ниже? Я вставил два, и ни один из них не отображается, я не знаю, в чем я не прав. Любая помощь приветствуется. Заранее спасибо. Я вставил исполняемый код ниже
library(shiny)
library(shinythemes)
library(dplyr)
function.test<-function(){
df1 <- structure(
list(date= c("2021-06-28","2021-06-28","2021-06-28"),
Category = c("ABC","ABC","ABC"),
Week= c("Wednesday","Wednesday","Wednesday"),
DR1 = c(4,1,0),
DR01 = c(4,1,0), DR02= c(4,2,0),DR03= c(9,5,0),
DR04 = c(5,4,0),DR05 = c(5,4,0),DR06 = c(5,4,0),DR07 = c(5,4,0),DR08 = c(5,4,0)),
class = "data.frame", row.names = c(NA, -3L))
return(df1)
}
ui <- fluidPage(
ui <- shiny::navbarPage(theme = shinytheme("flatly"), collapsible = TRUE,
br(),
tabPanel("First Panel",
fluidPage(
fluidRow(
br(), br(),
column(4, "",
wellPanel(
uiOutput("date"),
uiOutput("mycode")
),
wellPanel(
conditionalPanel(
condition = "output.mycode",
actionButton("reset", "Reset")
)
)
),
column(8, "",
tabsetPanel(
tabPanel("Output1", plotOutput("graph",width = "100%", height = "600"),
tabPanel("Output2",uiOutput('daterange')),
tabPanel("Output3")
)
)
))
)
)))
server <- function(input, output,session) {
data <- reactive(function.test())
output$date <- renderUI({
req(data())
all_dates <- seq(as.Date('2021-01-01'), as.Date('2021-01-15'), by = "day")
disabled <- as.Date(setdiff(all_dates, as.Date(data()$date2)), origin = "1970-01-01")
dateInput(input = "date2",
label = h4("Data"),
min = min(data()$date2),
max = max(data()$date2),
value = NA,
format = "dd-mm-yyyy",
datesdisabled = disabled)
})
output$daterange <- renderUI({
tagList(dateRangeInput("daterange1", "",
start = min(data()$date),
end = max(data()$date),
min = min(data()$date),
max = max(data()$date),
format = "dd-mm-yyyy"))
})
observeEvent(input$reset, {
req(input$date2)
df1 <- data()
my$plot <- NULL
updateDateInput(session, 'date2', value = NA)
updateSelectInput(session, 'code', h4("Category"),choices= unique(df1$Category), selected=character(0))
})
}
shinyApp(ui = ui, server = server)
Пример:
Комментарии:
1. Я не совсем уверен в том, что вы ищете или в чем ваша проблема, но я думаю, что ваши панели вкладок «Вывод2» и «Вывод3» не отображаются, верно? Если это так, просто оберните их оба с помощью панели tabsetPanel:
tabstPanel(tabPanel("Output2",uiOutput('daterange')), tabPanel("Output3"))
2. Неправильное закрытие скобок. Попробуйте
tabsetPanel(tabPanel(...), tabPanel(...))
— как предлагали другие.
Ответ №1:
Попробуй это:
column(8, "",
tabsetPanel(
tabPanel("Output1", plotOutput("graph",width = "100%", height = "600")),
tabPanel("Output2",uiOutput('daterange')),
tabPanel("Output3")
)
)
Ответ №2:
Похоже, обратная связь от @Silentdevildoll поддержит ваши потребности. Плюс вы дважды вызывали fluidPage() и navbarPage() в пользовательском интерфейсе. Кроме того, вы дважды назначили объекту «пользовательский интерфейс»
library(shiny)
library(shinythemes)
library(dplyr)
function.test<-function(){
df1 <- structure(
list(date= c("2021-06-28","2021-06-28","2021-06-28"),
Category = c("ABC","ABC","ABC"),
Week= c("Wednesday","Wednesday","Wednesday"),
DR1 = c(4,1,0),
DR01 = c(4,1,0), DR02= c(4,2,0),DR03= c(9,5,0),
DR04 = c(5,4,0),DR05 = c(5,4,0),DR06 = c(5,4,0),DR07 = c(5,4,0),DR08 = c(5,4,0)),
class = "data.frame", row.names = c(NA, -3L))
return(df1)
}
ui <-
shiny::navbarPage(theme = shinytheme("flatly"),
collapsible = TRUE,
br(),
tabPanel(title = "First Panel",
fluidRow(
br(),
br(),
column(width = 4, "",
wellPanel(
uiOutput("date"),
uiOutput("mycode")
), #close wellPanel
wellPanel(
conditionalPanel(
condition = "output.mycode",
actionButton("reset", "Reset")
) #close conditionalPanel
) #close wellPanel
), #close column
column(width = 8, "",
tabsetPanel(
tabPanel("Output1",
plotOutput("graph", width = "100%", height = "600"),
tabsetPanel(
tabPanel("Output2",
uiOutput('daterange')),
tabPanel("Output3")
) # close tabsetPanel
) #close tabPanel
) # close tabsetPanel
) #close column
) #close fluidRow
) #close tabPanel
) #close NavPage
server <- function(input, output,session) {
data <- reactive(function.test())
output$date <- renderUI({
req(data())
all_dates <- seq(as.Date('2021-01-01'), as.Date('2021-01-15'), by = "day")
disabled <- as.Date(setdiff(all_dates, as.Date(data()$date2)), origin = "1970-01-01")
dateInput(input = "date2",
label = h4("Data"),
min = min(data()$date2),
max = max(data()$date2),
value = NA,
format = "dd-mm-yyyy",
datesdisabled = disabled)
})
output$daterange <- renderUI({
tagList(dateRangeInput("daterange1", "",
start = min(data()$date),
end = max(data()$date),
min = min(data()$date),
max = max(data()$date),
format = "dd-mm-yyyy"))
})
observeEvent(input$reset, {
req(input$date2)
df1 <- data()
my$plot <- NULL
updateDateInput(session, 'date2', value = NA)
updateSelectInput(session, 'code', h4("Category"),choices= unique(df1$Category), selected=character(0))
})
}
shinyApp(ui = ui, server = server)
Комментарии:
1. Спасибо за ответ, но я хотел бы получить вывод 2 и вывод 3 на стороне вывода 1, если это возможно. Я вставил пример выше, чтобы вы увидели