R Shiny中的sliderInput有问题 - 获取NaNs

时间:2015-03-04 23:05:24

标签: r slider shiny rangeslider

我正在尝试制作一个在2005年到2040年之间有多年的滑块输入。看起来很简单,对吧?通常它工作正常,但每隔一段时间我会将滑块拉到太远的左边,它会给我NaN,这往往会使事情崩溃。我试图设置其余的代码,以便它没有问题,但它仍然困扰着我。我已经在互联网上搜索了解释,但到目前为止还没有。这是我的ui.R:

library(shiny)

shinyUI(fluidPage(
  titlePanel("Test"),

  sidebarLayout(
  sidebarPanel(

    selectInput("over", "Indicator", c("Indicator 1", "Indicator 2"), selected="Trade"),

    selectInput("type", "Type", c("Discrete", "Continuous")),


    # Nothing particularly unusual here...   
    sliderInput("year", "Year", min=2005, max=2040, value=2005, animate=animationOptions(interval=1500), sep=""),

    checkboxInput("table", "Show Table")

    , width=3),

  mainPanel(    
    uiOutput("plot"),

    uiOutput("showtable")

    , width=9)
  )
))

1 个答案:

答案 0 :(得分:9)

我认为问题可能在于您的sep参数。这应该是step吗?如果是这样,则需要是数字或NULL。我将该行更改为以下内容:

sliderInput("year", "Year", min=2005, max=2040, value=2005, animate=animationOptions(interval=1500), step=1),

工作得很好。至少,我能够尽可能地向左拖动而没有任何问题。另一方面,我没有你的server.R文件,所以如果问题存在,或者文件之间有互动,我就不会看到它。

更新

问题在于你的Shiny版本。我发现这是因为sep参数是"未使用的参数"当我试图运行该应用程序时。我原本以为这是一个错字,但你的确定性(在你最近的评论中)让我查看了sliderInput的文档。你是完全正确的,sep是一个有效的参数。我想这意味着我的shiny包的版本已经过时了,所以我更新了它。更新后,不仅sep参数被接受,而且我能够复制您的问题。我发现如果我试图将滑块拖离浏览器窗口,其值将更改为NaN。此外,滑块看起来更漂亮。我猜这与sliderInput函数的代码更改有关。如果我找到更改,我会看一下并再次更新。

UPDATE2

我发现了这个问题。在最新版本的Shiny中,他们决定使用jQuery编写的范围滑块ion.rangeSlider。具体来说,他们使用的是2.0.2版。不幸的是,当左侧滑块从浏览器窗口拉出时,该版本had an issue返回NaN(听起来很熟悉?)。这已在ion.rangeSlider(2.0.6)的最新版本中修复。我希望shiny包的下一版本包含最新版本的ion.rangeSlider

我知道这并没有真正解决你的问题。但是,以下将:

  1. 找出R软件包的安装位置
  2. 转到子文件夹shiny \ www \ shared \ ionrangeslider \ css
  3. 将文件ion.rangeSlider.skinShiny.css复制到其他地方
  4. 删除有光泽的\ www \ shared \ ionrangeslider
  5. 的内容
  6. 下载ion.rangeSlider here
  7. 的.zip
  8. 将ion.rangeSlider-master的内容复制到步骤2中提到的ionrangeslider文件夹中
  9. 将ion.rangeSlider.skinShiny.css移回闪亮的\ www \ shared \ ionrangeslider \ css
  10. 然后只需分离并重新加载shiny包,您应该全部设置。