本地工作的R脚本不能在shinyapp.io上工作

Nik*_*k T 7 r shiny as.date

我正在尝试整理一个R + Shiny应用程序,至少在开始时,它会绘制日期数据的直方图.我在RStudio的本地系统上运行得很好,但是在shinyapps.io中它不起作用.

目前,应用程序非常简单 - 用户界面并没有真正做任何事情,数据只是测试数据的一小部分.

在RStudio中工作正常(绘制一个漂亮的小直方图).当加载到shinyapps.io时,"标题面板"文本和侧边栏显示但是在一两秒之后 - 它报告错误"'来自'不能是NA,NaN或无限"或 - 屏幕变灰并且脚本停止(?)在两种情况下都没有产生直方图.

让我感到困惑; 我很想知道是否有人对我出错的地方有任何建议.也许这与as.Date有关 - 这里报告一个可能类似的问题,没有任何解决方案.

我的两个闪亮文件是:

# ui.R

shinyUI(fluidPage(
  titlePanel("title panel"),

  sidebarLayout(
    sidebarPanel(

      ),

    mainPanel(

      plotOutput("distPlot")

    )
  )
))
Run Code Online (Sandbox Code Playgroud)

# 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)

  })

})
Run Code Online (Sandbox Code Playgroud)

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 version:0.0.0
2015-02- 22T10:00:50.784283 + 00:00 shinyapps [32851]:
2015-02-22T10:00:50.784285 + 00:00 shinyapps [32851]:使用进程ID启动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上

Pau*_*ros 6

你有两个问题.首先,您错过了数据中的一些引号.但是,修复并没有改变结果.我复制了你的代码,修改了引号,并部署了它并获得了相同的结果(在本地工作但在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")
Run Code Online (Sandbox Code Playgroud)

这在本地和shinyapps.io都有效.所以问题不在于您的程序,而是如何处理日期.

我认为这个问题可能与单个数字日期所需的前导零相关,但改变这个问题并不能解决问题.但是,当我用两位数字替换月份名称时,它在本地和shinyapps.io上都有效.因此,似乎shinyapps.io在将月份名称转换为日期值方面存在一些困难.但是,我不知道为什么会这样.

更新:在Fereshteh Karimeddini提供的领导之后,我通过嵌入以下代码修改了文件:在server.R中:

output$dates = renderText({format(num_date, format = "%d %B %Y")})
output$location = renderText({Sys.getlocale(category = "LC_ALL")})
Run Code Online (Sandbox Code Playgroud)

在ui.R:

textOutput("dates")
textOutput("location")
Run Code Online (Sandbox Code Playgroud)

有趣的是,无论是在本地运行还是在shinyapps.io上运行,我都得到了与"日期"输出完全相同的结果.我以为我会用法语或其他东西获得月份名称.但是,对于"位置"输出,我得到了不同的结果.本地:

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 = C

注意:为了便于阅读,添加了回车符.

在debian论坛上有一个错误报告(我不知道与Ubuntu的关系,这是shinyapps.io使用的),它指出C.UTF-8没有包含月份名称.然而,这是从2012年开始,并且错误报告说它已在最近的版本中得到修复.另外,如果在shinyapps.io上的C.UTF-8中确实没有月份名称,那么它应该不能输出月份名称(它完美地完成了).这让我想知道 - 如果它可以输出月份名称,为什么它不能读月份名称?所以我试着让它做到这一点.在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")})
Run Code Online (Sandbox Code Playgroud)

在ui.R:

sidebarPanel(textOutput("dates")),
mainPanel(textOutput("redates"))
Run Code Online (Sandbox Code Playgroud)

在本地,sidebarPanel和mainPanel显示完全相同的东西:2006年3月9日.但是,在shinyapps.io上,主面板显示NA.所以,似乎shinyapps.io可以把它拿出来但不能接受它,至少就月份名称而言.这有多奇怪?