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的主要内容,如果未能解决你的问题,请参考以下文章