R Shiny 中的 sliderInput 出现问题 - 获取 NaN

Posted

技术标签:

【中文标题】R Shiny 中的 sliderInput 出现问题 - 获取 NaN【英文标题】:Having Problems with sliderInput in R Shiny - Getting NaNs 【发布时间】:2015-05-06 04:07:51 【问题描述】:

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

【问题讨论】:

自学问题——为什么需要animate=animationOptions(interval=1500) 当数据加载为默认值时(间隔 = 1000),我遇到了问题。不过,从那以后我已经做了一些优化,我可能可以把它拿出来。但是,问题在我添加之前就开始了。 【参考方案1】:

我认为问题可能出在您的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 版本。不幸的是,那个版本had an issue 在左滑块被拉出浏览器窗口时返回了 NaN(听起来很熟悉?)。这已在最新版本的ion.rangeSlider (2.0.6) 中得到修复。我希望shiny 软件包的下一个版本包含最新版本的ion.rangeSlider

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

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

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

【讨论】:

sep="" 的目的是去掉千位和百位之间的逗号,因为不习惯用年份这样做。它为此目的工作得很好。我添加了 step=1,但这并没有解决问题。请注意,滑块显示的是 NaN——不仅仅是 R 返回错误——实际的滑块显示的是 NaN。 我更新了答案以反映我能够重现您的问题,但尚未解决。 啊哈!好吧,那我没疯。唯一的问题是我没有在本地运行它——我正在使用 shinyapps.io 来托管它。尽管如此,很高兴至少知道这个错误是站在他们这边的,并且希望它最终会被修复。 您还可以包含代码以使用早期版本覆盖滑块功能,因此您会得到不产生 NaN 的稍微不那么漂亮的滑块。如果你认为我的回答足够了,你会accept吗?这涉及单击投票箭头下方左侧的复选标记。 感谢您的调查。我在 Shiny 的开发版中更新到了新版本的 ionRangeSlider,所以问题应该已经修复了。

以上是关于R Shiny 中的 sliderInput 出现问题 - 获取 NaN的主要内容,如果未能解决你的问题,请参考以下文章

使用 R/Shiny 创建动态数量的输入元素

如何实时刷新 Shiny 中的 sliderInput()(不仅在滑动结束时)?

如何使用滑块输入在 R Shiny 中输入超过 2 个值

R shiny教程-3:添加小部件到Shiny App

Shiny 中的一系列需要(验证):仅打印第一个失败案例

R Shiny 输入滑块范围值