R скрипт работает локально не работает на shinyapp.io
Я пытаюсь собрать приложение R + Shiny, которое, по крайней мере изначально, строит гистограмму данных о дате. У меня это работает нормально на моей локальной системе в RStudio, но в shinyapps.io это не работает.
Приложение на данный момент очень простое: пользовательский интерфейс ничего не делает, а данные представляют собой лишь небольшую выборку тестовых данных.
Прекрасно работает в RStudio (рисует симпатичную небольшую гистограмму). При загрузке в shinyapps.io отображается текст и боковая панель "панели заголовка", но через секунду или две либо она - сообщает об ошибке "" из "не может быть NA, NaN или бесконечной", либо - экран перестает работать, и сценарий останавливается (?) в обоих случаях без создания гистограммы.
Сбил меня с толку; было бы интересно услышать, если у кого-нибудь есть предложения, где я ошибся. Возможно, это связано с as.Date - возможно, о подобной проблеме сообщается здесь, без какого-либо решения.
Мои два блестящих файла:
# ui.R
shinyUI(fluidPage(
titlePanel("title panel"),
sidebarLayout(
sidebarPanel(
),
mainPanel(
plotOutput("distPlot")
)
)
))
а также
# 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)
})
})
Нет никаких ошибок (или что-либо кроме версий, запуска и прослушивания...), о которых сообщает showLogs ():
2015-02-22T10: 00: 50.507273 + 00: 00 shinyapps [32851]: версия R: 3.1.2
2015-02-22T10: 00: 50.509043 + 00: 00 shinyapps [32851]: версия rmarkdown: 0.0.0
2015-02-22T10: 00: 50.507340 + 00: 00 shinyapps [32851]: блестящая версия: 0.11.1
2015-02-22T10: 00: 50.509508 + 00: 00 shinyapps [32851]: версия knitr: 0.0.0
2015-02-22T10: 00: 50.784283 + 00: 00 shinyapps [32851]:
2015-02-22T10: 00: 50.784285 + 00: 00 shinyapps [32851]: запуск Shiny с идентификатором процесса: "14"
2015-02-22T10: 00: 50.792403 + 00: 00 shinyapps [32851]:
2015-02-22T10: 00: 50.792405 + 00: 00 shinyapps [32851]: прослушивание по адресу http://0.0.0.0:57429/
2 ответа
У тебя две проблемы. Во-первых, вы пропустили некоторые цитаты в ваших данных. Однако исправление не изменило результат. Я скопировал ваш код, исправил кавычки, развернул его и получил те же результаты (работал локально, но не на shinyapps.io).
Вторая (и более важная проблема) связана с тем, как разные операционные системы обрабатывают даты. Я изменил часть данных server.R, чтобы быть следующим:
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")
Это работало как локально, так и на shinyapps.io. Так что проблема не в вашей программе, а в том, как обрабатываются даты.
Я подумал, что проблема может быть связана с тем, что для однозначных дат требуются начальные нули, но изменение не решило проблему. Однако, когда я заменил названия месяцев двузначными числами, он снова работал как локально, так и на shinyapps.io. Поэтому кажется, что shinyapps.io испытывает некоторые трудности с преобразованием названий месяцев в значения дат. Однако я не знаю, почему это произошло.
Обновление: Следуя указаниям, предоставленным Фереште Каримеддини, я изменил файлы, добавив следующий код: В server.R:
output$dates = renderText({format(num_date, format = "%d %B %Y")})
output$location = renderText({Sys.getlocale(category = "LC_ALL")})
В ui.R:
textOutput("dates")
textOutput("location")
Интересно, что я получил точно такие же результаты для вывода "даты", работаю ли я локально или на shinyapps.io. Я думал, что получу названия месяцев на французском или что-то в этом роде. Однако для вывода "location" я получил разные результаты. Локально:
LC_COLLATE = English_United States.1252;
LC_CTYPE = English_United States.1252;
LC_MONETARY = English_United States.1252;
LC_NUMERIC = С;
LC_TIME = English_United States.1252
На shinyapps.io:
LC_CTYPE = C.UTF-8;
LC_NUMERIC = С;
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 = С;
LC_ADDRESS = С;
LC_TELEPHONE = С;
LC_MEASUREMENT = C.UTF-8;
LC_IDENTIFICATION = С
Примечание: возврат каретки добавлен для удобства чтения.
На форуме Debian было сообщение об ошибке (я не знаю отношения к Ubuntu, которое использует shinyapps.io), в котором отмечалось, что C.UTF-8 не содержит названий месяцев. Однако это было с 2012 года, и в отчете об ошибке говорилось, что это было исправлено в недавнем выпуске. Кроме того, если бы в C.UTF-8 на shinyapps.io действительно не было названий месяцев, то он не должен был бы выводить названия месяцев (что было отлично). Это заставило меня задуматься - если он может выводить названия месяцев, почему он не может читать названия месяцев? Поэтому я попытался заставить это сделать именно это. В 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")})
В ui.R:
sidebarPanel(textOutput("dates")),
mainPanel(textOutput("redates"))
Локально, боковая панель и основная панель показывали одно и то же: 09 марта 2006 года. Однако на shinyapps.io основная панель показала NA. Таким образом, может показаться, что этот shinyapps.io может выложить это, но не может вынести это, по крайней мере, так далеко, как идут названия месяцев. Насколько это странно?
У меня такая же проблема. Кажется, что shinyapps.io использует разные настройки локали. Я пытался использовать%b в функции as.Date(), и он не смог правильно преобразовать дату, что привело к пустой записи. Это полностью испортило меня, потому что это также не вызвало никакой ошибки. Отладка, чтобы найти, что 1 строка не была забавой!
Я создал следующий встроенный код для разрешения моего названия месяца, потому что оно было отформатировано таким образом в моем источнике данных, поэтому мне пришлось преобразовать его:
матч ((месяц), с ("Ян", "Февраль", "Мар", "Апрель", "Май", "Июнь", "Июль", "Август", "сентябрь", "Октябрь", "ноябрь ", "декабрь"))
Месяц в приведенном выше коде - это имя переменной, содержащей значение имени месяца. Пример полной строки с использованием этого кода:
df $ Date <- with (df, paste (год, совпадение ((месяц)),c("январь", "февраль", "март", "апрель", "май", "июнь", "июль","Aug "," Sep "," Oct "," Nov "," Dec ")), Day, sep =" - "))
Наслаждайтесь!