4

我正在尝试制作一个介于 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)
  )
))
4

1 回答 1

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功能。如果发现更改,我将查看并再次更新。

更新2

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

我知道这实际上并不能解决您的问题。但是,以下将:

  1. 找出你的 R 包的安装位置
  2. 转到子文件夹 shiny\www\shared\ionrangeslider\css
  3. 将文件 ion.rangeSlider.skinShiny.css 复制到其他地方
  4. 删除 shiny\www\shared\ionrangeslider 的内容
  5. 在此处下载 ion.rangeSlider 的 .zip
  6. 将 ion.rangeSlider-master 的内容复制到步骤 2 中提到的 ionrangeslider 文件夹中
  7. 将 ion.rangeSlider.skinShiny.css 移回 shiny\www\shared\ionrangeslider\css

然后只需分离并重新加载shiny包,你就应该准备好了。

于 2015-03-04T23:38:44.833 回答