R salida diferente brillante entre renderTable y renderDataTable
render table shiny (1)
No hay ninguna razón para tener el mismo resultado de 2 funciones diferentes.
-
rendertable
usaxtable
para crear la tabla html -
renderDataTable
utiliza una biblioteca javascript externa
Puede obtener el mismo formato de fecha, solo debe formatear su fecha antes de llamar a la renderTable
. Aquí un breve ejemplo completo.
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))
Tengo una aplicación brillante que muestra una buena tabla html de mis datos, usando renderDataTable
. Luego quería hacer algunas estadísticas básicas, datos de subconjuntos y calcular los medios y algunos otros datos.
Al mostrar resultados con renderTable
, encontré que la columna de fecha no se mostró en formato de fecha. En la figura puedes ver la diferencia. Ambas tablas se generan a partir del mismo conjunto de datos en la misma aplicación web brillante. ¿Puedes explicar lo que está pasando?
Y aquí puedes ver ui.R y server.R. En este script, solo quiero mostrar una tabla y me sorprendió la salida diferente.
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"))
)
)
))
y servidor.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)
}
)
})
Gracias de antemano por tu ayuda