闪亮滑块逐月输入

时间:2016-06-07 21:28:16

标签: javascript r shiny

我正在写一个闪亮的,想要一个日期的滑块。我的数据中的日期是每月一次,我想一次一个月前进。滑块输入的docs表示步长值为秒或天,具体取决于最小/最大参数类型。目前我有:

>>> import re, json
>>> broken = r'"JSON string with escaped quote: \' and various other broken escapes: \a \& \$ and a newline!\n"'
>>> json.loads(broken)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/mjpieters/Development/Library/buildout.python/parts/opt/lib/python3.5/json/__init__.py", line 319, in loads
    return _default_decoder.decode(s)
  File "/Users/mjpieters/Development/Library/buildout.python/parts/opt/lib/python3.5/json/decoder.py", line 339, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/Users/mjpieters/Development/Library/buildout.python/parts/opt/lib/python3.5/json/decoder.py", line 355, in raw_decode
    obj, end = self.scan_once(s, idx)
json.decoder.JSONDecodeError: Invalid \escape: line 1 column 34 (char 33)
>>> json.loads(re.sub(r'(?<!\\)\\(?!["\\/bfnrt]|u[0-9a-fA-F]{4})', r'', broken))
"JSON string with escaped quote: ' and various other broken escapes: a & $ and a newline!\n"

我希望能够逐月而不是白天,但看起来他们给我的东西似乎不可能。有没有我可以添加的js片段会给我这个功能?

澄清注意:我已阅读此功能的文档,并且据我所知,没有基本功能。测试时,时间格式参数仅更改标签而不是值。我看过一些帖子可以访问某些小部件的值,并想知道这是否可行。例如)

sliderInput("slider", "Time", min=as.Date("2005-01-01"),
                              max=as.Date("2014-12-01"),
                              value=as.Date("2005-01-01"), step = 30,...)

2 个答案:

答案 0 :(得分:14)

if (env.BRANCH_NAME == "deployment") { ... do some build ... } else { ... do something else ... } 中有timeFormat个功能。有关更多信息,请访问Slider Input Widget

修改

要获取日期并在以后的分析中使用它们,可以归功于这个问题First day of the month from a POSIXct date time using lubridate以及Roland提供的功能。

sliderInput

enter image description here

答案 1 :(得分:3)

这是我使用的一种解决方案,但首先我想解释一下逻辑:

  1. 如上所述,timeFormat函数的sliderInput()自变量未提供所需的1个月步功能。取而代之的是,它只是格式化底层的日常数据,因此,步进每天都保持不变。
  2. sliderInput()有另一个参数step,可用于显式定义步进增量。但是,它需要一个整数作为输入,因此不接受向量/范围。鉴于月份的长度不同,此处不宜使用单个整数。我尝试使用lubridate::months(1)lubridate::period(1, units = "months"),但都无济于事,因为应用一次渲染后,两者都自动转换为30的整数,因此没有保留每月增量。

我找到了shinyWidgets::sliderTextInput()的解决方案,它创建了一个字符滑块。

假设您的日期存储为表yyyy-mm-dd的列Date中的d个日期:

sliderTextInput(
  inputId    = "myID",
  label      = "myLabel",
  choices    = as.yearmon(unique(d$Date)),
  selected   = c(as.yearmon(min(d$Date)), as.yearmon(max(d$Date))),
  grid       = TRUE,
  width      = "100%"
)

使用此功能,您始终可以按月递增。使用as.yearmon(),因此您的应用以MMM YYYY格式显示滑块标签。

请记住,滑块输出是一个字符,因此您需要将其反向转换为日期:

  • as.Date(as.yearmon(input$myID[1]))开始
  • as.Date(as.yearmon(input$myID[2]))结束