La secuencia de comandos R funciona localmente y no funciona en shinyapp.io
as.date (2)
Estoy tratando de armar una aplicación R + Shiny que, al menos inicialmente, traza un histograma de datos de fecha. Lo tengo funcionando bien en mi sistema local en RStudio, pero en shinyapps.io no funciona.
La aplicación, por el momento, es muy simple: la interfaz de usuario realmente no hace nada, y los datos son solo una pequeña muestra de datos de prueba.
Funciona bien en RStudio (dibuja un pequeño y bonito histograma). Cuando se carga en shinyapps.io, aparece el texto del ''panel de título'' y la barra lateral, pero después de uno o dos segundos, informa que el error "''desde'' no puede ser NA, NaN o infinito" o - la pantalla se apaga y el script se detiene (?) en ambos casos sin producir un histograma.
Me ha desconcertado; Estaría interesado en saber si alguien tiene alguna sugerencia sobre dónde me he equivocado. Quizás tenga que ver con as.Date: se informa un problema posiblemente similar aquí , sin ninguna solución.
Mis dos archivos brillantes son:
# ui.R
shinyUI(fluidPage(
titlePanel("title panel"),
sidebarLayout(
sidebarPanel(
),
mainPanel(
plotOutput("distPlot")
)
)
))
y
# server.R
library(shiny)
shinyServer(function(input, output){
output$distPlot <- renderPlot({
text_date <- c("9 March 2006", "31 October 2008", "24 September 2008", "27 February 2009", "19 May 2014", "11 December 2009", "7 August 2013", "8 December 2014", "2 February 2010", "22 December 2014", "20 December 2011", "4 September 2009", "19 December 2013", "10 October 2007", "19 September 2008")
num_date <- as.Date(text_date, format = "%d %B %Y")
#plot a histogram
hist(num_date,
breaks = "years",
format = "%Y",
freq = TRUE)
})
})
No hay errores (ni nada que no sean versiones, comenzando y escuchando en ...) informados por showLogs ():
2015-02-22T10: 00: 50.507273 + 00: 00 shinyapps [32851]: versión R: 3.1.2
2015-02-22T10: 00: 50.509043 + 00: 00 shinyapps [32851]: versión rmarkdown: 0.0.0
2015-02-22T10: 00: 50.507340 + 00: 00 shinyapps [32851]: Versión brillante: 0.11.1
2015-02-22T10: 00: 50.509508 + 00: 00 shinyapps [32851]: versión knitr: 0.0.0
2015-02-22T10: 00: 50.784283 + 00: 00 shinyapps [32851]:
2015-02-22T10: 00: 50.784285 + 00: 00 shinyapps [32851]: Inicio brillante con la ID del proceso: ''14''
2015-02-22T10: 00: 50.792403 + 00: 00 shinyapps [32851]:
2015-02-22T10: 00: 50.792405 + 00: 00 shinyapps [32851]: escuchando en http://0.0.0.0:57429
Tienes dos problemas. Primero, te perdiste algunas citas en tus datos. Sin embargo, corregir eso no cambió el resultado. Copié tu código, arreglé las comillas, lo implementé y obtuve los mismos resultados (funcionó localmente pero no en shinyapps.io).
El segundo (y más importante problema) es con la forma en que los diferentes sistemas operativos manejan las fechas. Cambié la porción de datos de server.R por ser la siguiente:
text_date <- c("2006-03-09", "2008-10-31", "2008-09-24", "2009-02-27", "2014-05-19", "2013-08-07", "2014-12-08", "2010-02-02", "2014-12-22", "2011-12-20", "2009-09-04", "2013-12-19", "2007-10-10", "2008-09-19")
Eso funcionó tanto localmente como en shinyapps.io. Entonces, el problema no es con su programa, sino cómo se procesan las fechas.
Pensé que el problema podría estar relacionado con los ceros iniciales que se requieren para las fechas de un solo dígito, pero alterar eso no solucionó el problema. Sin embargo, cuando reemplacé los nombres de los meses con números de dos dígitos, de nuevo funcionó tanto localmente como en shinyapps.io. Por lo tanto, parece que shinyapps.io tiene algunas dificultades para convertir los nombres de los meses en valores de fecha. Sin embargo, no sé por qué sucedería eso.
Actualización : siguiendo un ejemplo proporcionado por Fereshteh Karimeddini , modifiqué los archivos incrustando el siguiente código: En server.R:
output$dates = renderText({format(num_date, format = "%d %B %Y")})
output$location = renderText({Sys.getlocale(category = "LC_ALL")})
En ui.R:
textOutput("dates")
textOutput("location")
Curiosamente, obtuve exactamente los mismos resultados para la salida "fechas" ya sea que estuviera ejecutando localmente o en shinyapps.io. Pensé que obtendría los nombres de los meses en francés o algo así. Sin embargo, para la salida de "ubicación", obtuve resultados diferentes. En la zona:
LC_COLLATE = English_United States.1252;
LC_CTYPE = English_United States.1252;
LC_MONETARY = English_United States.1252;
LC_NUMERIC = C;
LC_TIME = English_United States.1252
En shinyapps.io:
LC_CTYPE = C.UTF-8;
LC_NUMERIC = C;
LC_TIME = C.UTF-8;
LC_COLLATE = C.UTF-8;
LC_MONETARY = C.UTF-8;
LC_MESSAGES = C.UTF-8;
LC_PAPER = C.UTF-8;
LC_NAME = C;
LC_ADDRESS = C;
LC_TELEPHONE = C;
LC_MEASUREMENT = C.UTF-8;
LC_IDENTIFICATION = C
Nota: se agregaron retornos de carro para facilitar la lectura.
Hubo un informe de error en un foro de Debian (no sé la relación con Ubuntu, que es lo que utiliza shinyapps.io) que señaló que C.UTF-8 no contenía los nombres de los meses. Sin embargo, eso fue a partir de 2012, y el informe de error dijo que se arregló en un lanzamiento reciente. Además, si realmente no había nombres de mes en el C.UTF-8 en shinyapps.io, entonces no debería haber sido capaz de mostrar los nombres de los meses (lo cual hizo perfectamente). Esto me hizo preguntarme: si puede mostrar los nombres de los meses, ¿por qué no puede leer los nombres de los meses? Así que intenté que hiciera exactamente eso. En server.R:
text_date = c("09 03 2006")
num_date <- as.Date(text_date, format = "%d %m %Y")
x = format(num_date, format = "%d %B %Y")
output$dates = renderText({x})
renum_date = as.Date(x, format = "%d %B %Y")
output$redates = renderText({format(renum_date, format = "%d %B %Y")})
En ui.R:
sidebarPanel(textOutput("dates")),
mainPanel(textOutput("redates"))
Localmente, sidebarPanel y mainPanel mostraron exactamente lo mismo: 09 de marzo de 2006. Sin embargo, en shinyapps.io, el panel principal mostró NA. Entonces, parece que shinyapps.io puede repartirlo pero no puede tomarlo, al menos en lo que respecta a los nombres de los meses. ¿Qué tan extraño es eso?
Yo tuve el mismo problema. Parece que shinyapps.io usa configuraciones de locale diferentes. Intenté usar% b en la función as.Date () y no se pudo convertir la fecha correctamente, lo que dio como resultado un registro nulo. Esto me desordenó por completo, porque tampoco arrojó ningún tipo de error. ¡Depurar para encontrar que 1 línea no era divertida!
Creé el siguiente código en línea para resolver el nombre de mi mes porque estaba formateado de esa manera en mi fuente de datos, así que tuve que convertirlo:
coincidencia ((mes), c ("enero", "feb", "mar", "abr", "mayo", "jun", "jul", "ago", "sep", "oct", "nov") ","Dic"))
El mes en el código anterior es el nombre de la variable que contiene el valor del nombre del mes. Un ejemplo de una línea completa usando este código:
df $ Date <- with (df, paste (año, partido ((mes), c ("enero", "feb", "mar", "abr", "mayo", "jun", "jul", " Ago "," sep "," oct "," nov "," dic ")) , día, sep =" - "))
¡Disfrutar!