2015-02-22 2 views
7

Я пытаюсь собрать приложение R + Shiny, которое, по крайней мере, первоначально, отображает гистограмму данных даты. У меня он работает отлично на моей локальной системе в RStudio, но в shinyapps.io это не работает.R скрипт, работающий локально, не работает на shinyapp.io

Приложение на данный момент очень прост - пользовательский интерфейс на самом деле ничего не делает, а данные - всего лишь небольшая выборка тестовых данных.

Прекрасно работает в RStudio (рисует милую гистограмму). При загрузке на shinyapps.io текст «панель заголовка» и боковая панель отображаются, но после секунды или двух либо он - сообщает, что ошибка «от« не может быть NA, NaN или бесконечная »или - экран выдается серым сценарий останавливается (?) в обоих случаях без создания гистограммы.

Я сбил с толку; было бы интересно услышать, есть ли у кого-нибудь предложения о том, где я ошибся. Возможно, это связано с as.Date - возможно, подобная проблема сообщается here, без какого-либо решения.

Мои две блестящие файлы:

# 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]: версия для ножа: 0.0.0
2015-02-22T10: 00: 50.784283 + 00: 00 shinyapps [32851]:
2015-02-22T10: 00: 50.784285 + 00: 00 shinyapps [32851]: Запуск Блестящий с идентификатором процесса: '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

ответ

4

У вас есть две проблемы. Во-первых, вы пропустили некоторые кавычки в своих данных. Однако исправление не изменило результат. Я скопировал ваш код, исправил кавычки и развернул его и получил те же результаты (работал локально, но не на 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 имеет некоторые трудности с преобразованием имен месяцев в значения даты. Однако я не знаю, почему это произойдет.

Update: После a lead provided by Fereshteh Karimeddini, я изменил файлы, внедряя следующий код: В 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 = C;
LC_TIME = English_United States.1252

На 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 = С

Примечание: возврат каретки добавлены для удобства чтения.

На debian форуме был a bug report (я не знаю отношения к 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")) 

Локально sidebarPanel и mainPanel показали одно и то же: 09 марта 2006 г. Однако на shinyapps.io, то mainPanel показал NA. Таким образом, казалось бы, что shinyapps.io может вымыть его, но не может принять его, по крайней мере, до тех пор, пока названия месяцев не исчезнут. Как странно это?

+0

wow - Я только что провел несколько часов, пытаясь понять, почему мое приложение не работает на shinyapps.io, но работает локально. По-видимому, это также связано с тем, что shinyapps.io не работает с 'as.Date' w.r.t. месячные имена – jalapic

1

У меня была та же проблема. Кажется, что shinyapps.io использует разные настройки языка. Я пытался использовать% b в функции as.Date(), и он не смог правильно преобразовать дату, что привело к нулевой записи.Это полностью перепутало меня, потому что оно тоже не вызывало каких-либо ошибок. Отладка, чтобы найти, что 1 линия не была забавой!

Я создал следующий встроенный код, чтобы разрешить мое имя месяца, потому что он был отформатирован таким образом в моем источнике данных, так что я должен был преобразовать его:

матч ((месяц), с («Ян»,» Февраль »,« Мар »,« Апр »,« Май »,« Июнь »,« Июль »,« Авг »,« Сен »,« Октябрь »,« Ноябрь »,« Дек »))

Месяц в приведенном выше коде есть имя переменной, содержащее значение имени месяца. Пример полной строки, используя этот код:

ф.р. $ Дата < - с (ДФ, паста (год, матч ((месяц), с ("Ян", "Февраль", "Мар",» Apr »,« May »,« Jun »,« Jul »,« Aug »,« Sep »,« Oct »,« Nov »,« Dec »)), Day, sep =" - "))

Наслаждайтесь!