【问题标题】:Adjust table generation and request to generate table in Shiny调整表生成和请求在 Shiny 中生成表
【发布时间】:2021-11-01 15:38:36
【问题描述】:

能帮我解决下面代码中的两个小问题吗?

第一件事是我无法在我生成的表格中显示信息。想法是显示我的Test数据库对应的信息,但是没有出现。第二件事是当我运行APP时,表已经生成了,但这很奇怪,因为在data_subset中我插入了req(input$daterange1)

可执行代码如下:

library(shiny)
library(shinythemes)

Test <- structure(list(date2 = c("2021-06-30","2021-06-30","2021-11-01","2021-11-02"), 
Category = c("FDE", "ABC", "FDE", "ABC"), 
coef = c(4, 1, 6, 1)), class = "data.frame",row.names = c(NA, -4L))


ui <- fluidPage(
  
  shiny::navbarPage(theme = shinytheme("flatly"), collapsible = TRUE,
                    br(),
                    tabPanel("",
                             sidebarLayout(
                               sidebarPanel(
                                 uiOutput('daterange'),
                                 br()
                                 
                               ),
                               mainPanel(
                                 dataTableOutput('table')

                               )
                             ))
  ))

server <- function(input, output,session) {
  
  data <- reactive(Test)
  
  output$daterange <- renderUI({
    dateRangeInput("daterange1", "Period you want to see:",
                   min = min(data()$date2),
                   max = max(data()$date2))
  })
  
  data_subset <- reactive({
    req(input$daterange1)
    req(input$daterange1[1] <= input$daterange1[2])
    days <- seq(input$daterange1[1], input$daterange1[2], by = 'day')
    subset(data(), date2 %in% days)
  })
  
 
  output$table <- renderDataTable({
    data_subset()
  })
  
}

shinyApp(ui = ui, server = server)

【问题讨论】:

    标签: r shiny


    【解决方案1】:

    date2 %in% days 中,days 的类是Date,而date2 的类是character。 我建议先修改您的 data.frame 以将您的日期定义为实际日期:

    Test <- structure(list(date2 = as.Date(c("2021-06-30","2021-06-30","2021-11-01","2021-11-02")), 
    Category = c("FDE", "ABC", "FDE", "ABC"), 
    coef = c(4, 1, 6, 1)), class = "data.frame",row.names = c(NA, -4L))
    

    然后简单地比较您的日期。

        data_subset <- reactive({
            req(input$daterange1)
            req(input$daterange1[1] <= input$daterange1[2])
            subset(data(), date2 >= input$daterange1[1] & date2 <= input$daterange1[2])
    )}
    

    至于您的第二点,dateRangeInput 默认提供客户端时区的当前日期...因此,它不是 NULL。您也可以添加一个按钮。

    【讨论】:

    • 感谢您的回答。关于第一个问题 OK,但关于第二个问题很奇怪,因为如果我改变,例如,而不是在我的数据库中插入 01/11 和 02/11 并插入 01/10 和 02/10,daterange 有效,也就是说,当我运行APP时,daterange是空的。但是由于我的日期是今天和明天,daterange会自动运行而不是空。有没有办法调整这个?也就是说,它不会自动运行。
    • 如果startend 日期不在您的日期范围内(在minmax 内),则daterange 为空...但您的日历也为空.如果您喜欢这样,只需在您的dateRangInput 中使用start=Sys.time()+10000, end=Sys.time()+10000, 作为参数。
    • 感谢您的建议,我插入了您在答案中提到的这个开始和结束,但无论如何表格都是自动生成的。运行 APP 时,在我的 daterange 中出现 01/11 天,但我想要的是它是空的。
    • 我会接受你的回答,我对第二个问题做了新的问题:stackoverflow.com/questions/69800521/…我认为这更好理解
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-08
    • 1970-01-01
    • 2014-05-11
    • 2020-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多