R brillante sortie différente entre renderTable et renderDataTable
j'ai une application brillante qui montre une belle table html de mes données, en utilisant renderDataTable
. Ensuite, j'ai voulu faire quelques statistiques de base, des données de sous-ensemble et calculer des moyens et d'autres données.
quand on affiche des résultats avec renderTable
, j'ai trouvé que la colonne date n'était pas montrée dans le format date. Dans la figure ou peut voir la différence. Les deux tableaux sont générés à partir du même ensemble de données dans la même application Web brillante. Pouvez-vous expliquer ce qui se passe?
Et là, vous pouvez voir l'interface utilisateur.R et server.R. Dans ce script je veux juste montrer une table et j'ai été surpris par la sortie différente.
interface utilisateur.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"))
)
)
))
et le serveur.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)
}
)
})
Merci d'avance pour votre aide
1 réponses
il n'y a aucune raison d'avoir la même sortie à partir de 2 fonctions différentes.
rendertable
xtable
pour créer la table htmlrenderDataTable
utilise une bibliothèque javascript externe
vous pouvez obtenir le même format de date, vous devez juste formater votre date avant d'appeler renderTable
. Voici un bref exemple complet.
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))