R brillant de sortie différents entre renderTable et renderDataTable
J'ai une brillante application qui montre une belle table html de mes données, à l'aide de renderDataTable
. Puis j'ai voulu faire quelques statistiques de base, sous-ensemble de données et de calculer les moyens et quelques autres données.
Lors de l'affichage des résultats avec renderTable
, j'ai trouvé que la colonne de la date n'a pas été présenté dans le format de date. Dans la figure, on voit la différence. Les deux tables sont générées à partir de la même base de données dans le même brillant web app. Pouvez-vous expliquer ce qui se passe?
Et ici vous pouvez voir l'interface utilisateur.R et le serveur.R. Dans ce script, je veux juste montrer un tableau et a été surpris par la sortie différente.
de l'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 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
- Pourquoi attendez-vous t ont la même sortie pour
renderDataTable
etrenderTable
? Ils sont complètement différents. Ensuite, Vous devriez être en mesure de reproduire le même comportement avec un petit brillant exemple ( pas besoin d'avoir tous les autres composants de l'INTERFACE utilisateur/fonctions de serveur). Vous avez très long, bruyant, non reproductible exemple. - Je m'attendais à la même sortie que je pensais qu'ils étaient juste des façons de montrer de données, ne savais pas que je devais formater les données avant. Je suppose
renderTable
savait date a été dans certains format de date en raison def$date = as.Date(f$date)
Merci pour votre réponse. - Je vais essayer de faire de mon mieux concernant reproductible exemples prochaine fois. Merci.
- Notez que renderTable ne pas jouer gentil avec les dates. Vous auriez besoin de les convertir en caractères. Voir, par exemple, cette discussion
- Oui @Vincent qui était le point. Dans ce cas, je vais utiliser
renderDataTable
lors de la lecture avec les dates. Merci
Vous devez vous connecter pour publier un commentaire.
Il n'y a aucune raison d'avoir le même résultat à partir de 2 fonctions différentes.
rendertable
utilisextable
pour créer la table htmlrenderDataTable
utilise javascript externe de la bibliothèqueVous pouvez obtenir le même format de date, vous devez juste le format de votre date avant d'appeler
renderTable
. Voici un petit exemple complet.