R блестящий разный вывод между renderTable и renderDataTable

У меня есть блестящее приложение, которое показывает красивую html-таблицу моих данных, используя renderDataTable. Затем я хотел получить базовую статистику, данные подмножества, вычислить средние и некоторые другие данные.

При отображении результатов с renderTable я обнаружил, что столбец даты не отображается в формате даты. На рисунке вы можете увидеть разницу. Обе таблицы созданы из одного и того же набора данных в одном блестящем веб-приложении. Вы можете объяснить, что происходит?

введите описание изображения здесь

И здесь вы можете увидеть ui.R и server.R. В этом скрипте я просто хочу показать таблицу и был удивлен разным выводом.

ui.R

library(shiny)

# Estructura de la página (paneles)
shinyUI(pageWithSidebar(
  # Título superior
  headerPanel(""),
  # Panel lateral izquierdo - selección de datos
  sidebarPanel(
    helpText("Selecciona las fechas y el tipo de datos.
             Pulsa el botón Actualizar."),    
    selectInput("torre", "Torre:",
                list("Agres" = "mariola",
                     "Alfàs del Pi" = "shelada",
                     "Altura" = "altura",                                          
                     "Vistabella del Maestrat" = "vistabella",
                     "Xàtiva" = "xativa")),       
    selectInput("tipo", "Intervalo de datos",
                list("Diezminutales" = "-datos-10m.csv",
                     "Diarios" = "-datos-diarios.csv",
                     "Mensuales" = "-datos-mensuales.csv")),
    dateInput('date1',
              label = 'Fecha inicial',
              value = Sys.Date()),
    dateInput('date2',
              label = 'Fecha final.',
              value = Sys.Date()),
    submitButton("Actualizar"),
    helpText("
             Descarga de datos tabulados en formato CSV."),
    downloadButton('downloadData','Descargar datos')    
  ),

  # Panel principal (presentación de gráficas)
  mainPanel(
    tabsetPanel(
      tabPanel("Inicio",
               h3("Consulta de datos"),
               p(HTML("Some info.")),
               tableOutput("view")
               ),
      tabPanel("Ayuda", htmlOutput("ayuda"),id="ayuda"),
      tabPanel('Tabla de datos', dataTableOutput("table1")),      
      tabPanel('Medias', tableOutput("table2"))
    )
  )
))

и server.R

library(shiny)
library(plyr)
library(lubridate)
library(scales)

options(shiny.transcode.json = FALSE)

# Funciones
shinyServer(function(input,output){

  filename=reactive({
    paste0(input$torre,input$tipo)
    })
  day1=reactive({
    as.POSIXct(input$date1)
  })
  day2=reactive({
    as.POSIXct(input$date2)    
  })

  # Ayuda
  introFile <- './ayuda.txt'
  ayuda <- readChar(introFile, file.info(introFile)$size)
  output$ayuda <- renderText({HTML(ayuda)})

  datos2=reactive({
    fn = filename()
    f = read.csv(fn,header=T, sep=",",na.strings="-99.9")
    f$date = as.Date(f$date)
    f
  })
  datos=reactive({
    d1 <- as.Date(day1())
    d2 <- as.Date(day2())
    datos2a = datos2()
    with( datos2a , datos2a[ date >= d1 & date <= d2, ] )
  })  

  #  Tabla de datos
  output$table1 = renderDataTable({
    datos()
  }, options = list(aLengthMenu = c(12, 20, 40), iDisplayLength = 12))

  output$table2 = renderTable({
    datos()
  })

  output$downloadData <- downloadHandler(
    file = c('data.csv'),
    content = function(file) {
      write.csv(datos(), file)
    }
  )

})

Заранее спасибо за помощь


person pacomet    schedule 04.02.2014    source источник
comment
Почему вы ожидаете, что результат будет одинаковым для renderDataTable и renderTable? Они совершенно разные. Затем вы сможете воспроизвести то же поведение на небольшом блестящем примере (нет необходимости иметь все остальные компоненты пользовательского интерфейса / функции сервера). У вас очень давно зашумленный невоспроизводимый пример.   -  person agstudy    schedule 04.02.2014
comment
@agstudy Я ожидал того же результата, потому что думал, что это просто способы показать данные, и не знал, что раньше мне приходилось форматировать данные. Я предположил, что renderTable знал, что дата была в каком-то формате даты, потому что f$date = as.Date(f$date) Спасибо за ваш ответ.   -  person pacomet    schedule 04.02.2014
comment
@agstudy В следующий раз я постараюсь сделать все, что в моих силах, с воспроизводимыми примерами. Спасибо.   -  person pacomet    schedule 04.02.2014
comment
Обратите внимание, что renderTable плохо работает с датами. Вам нужно будет преобразовать их в символы. См., Например, этот обсуждение   -  person Vincent    schedule 04.02.2014
comment
Да, @ Винсент, в том-то и дело. В этом случае я буду использовать renderDataTable при игре с датами. Спасибо   -  person pacomet    schedule 05.02.2014


Ответы (1)


Нет причин иметь одинаковый вывод от двух разных функций.

  • rendertable использует xtable для создания таблицы html
  • renderDataTable использует внешнюю библиотеку javascript

Вы можете получить такой же формат даты, просто отформатируйте дату перед вызовом renderTable. Вот краткий полный пример.

library(shiny)
dat <- data.frame(date=seq.Date(Sys.Date(),by=1,length.out=5),
                  temp = runif(5))

ui <- fluidPage(
    fluidRow(column(4,dataTableOutput('dto')),
             column(4,tableOutput('to')))
  )

server <- function(input,output){

  output$dto <- renderDataTable({dat})
  dat$date <- format(dat$date,'%Y-%m-%d')
  output$to <- renderTable(dat)

}

runApp(list(ui=ui,server=server))
person agstudy    schedule 04.02.2014