格式化selectInput()以向用户显示字符日期

时间:2015-04-16 20:35:34

标签: r shiny

我目前正在构建一个闪亮的应用程序并尝试将一组日期呈现为最终用户的字符串,同时在服务器端代码中调用时仍保留其日期格式。

这里可能有一个简单的解决方案,但不确定如何在selectInput下拉列表中设置日期格式。在我的实际使用案例中,使用日期滑块并不理想,因为日期不遵循常见的间隔。

下面的可重复示例:

# setup
require(lubridate)
test.dates <- as.Date(c('2014-06-01', '2014-07-01', '2014-08-01',     
                        '2014-09-01', '2014-10-01', '2014-11-01',  
                        '2014-12-01', '2015-01-01','2015-02-01', 
                        '2015-03-01', '2015-04-01'))
test.names <- as.character(paste0(month(test.dates, label = T), ' ', 
                                  year(test.dates)))
test.df <- data.frame(date = test.dates)
row.names(test.df) <- test.names

# shiny
server <- function(input, output) {

   output$table <- renderTable(test.df)

}


ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      selectInput("test", label = "DATE FORMAT TEST:", choices =   
                  test.df, selected = test.df[1,])
    ),
    mainPanel(tableOutput('table'))
  )
)

shinyApp(ui = ui, server = server)

1 个答案:

答案 0 :(得分:1)

我相信你会发现传递character个对象比闪亮的date个对象更容易。我只想使用日期的直接character值,并且只要您需要它们date,后续分析中的对象就会显式转换为date对象。下面提供了一个示例,其中下拉列表和表格都具有字符格式化日期。

require(lubridate)
myDates <- c('2014-06-01', '2014-07-01', '2014-08-01',     
             '2014-09-01', '2014-10-01', '2014-11-01',  
             '2014-12-01', '2015-01-01','2015-02-01', 
             '2015-03-01', '2015-04-01')
test.names <- as.character(paste0(lubridate::month(test.dates, label=TRUE), ' ', 
                                  year(test.dates)))
test.df <- data.frame(date = myDates)
row.names(test.df) <- test.names

# shiny
server <- function(input, output) {

    output$table <- renderTable(test.df)

}


ui <- fluidPage(
    sidebarLayout(
        sidebarPanel(
            selectInput("test", label = "DATE FORMAT TEST:", choices =   
                            myDates, selected = myDates[1])
        ),
        mainPanel(tableOutput('table'))
    )
)

shinyApp(ui = ui, server = server)