用于选择闪亮的日期和时间(而不仅仅是日期)的UI元素

时间:2014-11-29 03:18:33

标签: r shiny

在过去,我使用了dateInput和滑块的组合来获取闪亮应用的日期和小时。我想知道现在是否有更好的选择,因为我需要收集最新的输入。

在线搜索没有帮助,所以要求SO。

由于

3 个答案:

答案 0 :(得分:4)

自提出这个问题以来已经有一段时间了,但我猜它仍然有用,因为我还没有找到一个满意的答案来检索时间输入。

以下是检索时间输入的3个示例。

  1. 首先是我认为大多数人,包括我自己,已经或正在寻找。用于时间输入检索的闪亮的输入时间对象。它使用HTML时间输入:<输入ID =' ui_time'类型='时间'>接下来是一些简单的javascript函数,用于在传递给Shiny.onInputChange()函数之前检索输入数据,作为输入传递给Shiny服务器。

    <input id="ui_time" type="time">

    '<script> document.getElementById("ui_time").onchange = function() { var time = document.getElementById("ui_time").value; Shiny.onInputChange("input_html", time); }; </script>'

  2. 第二个,可能是不希望但坚持使用滑块,是一个简单但麻烦的黑客来创建2个滑块,一个用于注册时间,另一个用于注册分钟,然后将2个结果连接到返回适当的时间输入。

    sliderInput("slider_hours", "Hours:", min=0, max=23, value=0, step = 1), sliderInput("slider_mins", "Mins:",min = 0, max = 59, value = 0, step = 1)

  3. 最后,如果需要日期和时间格式,有些人可能不知道,因为我没有,滑块确实接受日期时间输入作为POSIXt对象。在这种情况下,滑块输入可以构造如下:

    sliderInput("slider_datetime", "Date & Time:", min=as.POSIXlt("2010-01-01 00:00:00", "GMT"), max=as.POSIXlt("2020-01-01 23:59:59", "GMT"), value=as.POSIXlt("2010-01-01 00:00:00", "GMT"), timezone = "GMT")

  4. 对于那些不太熟悉shiny或html的人,你可以在我的github上查看功能样本代码:https://github.com/krenova/Shiny_TimeInput/blob/master/app.R

    或者只是在R中运行以下要点:

    runGist('https://gist.github.com/krenova/fc184de17892905182a422c96117e989')

    我是闪亮的html新手,上周才把它拿起来,所以请记住,我可能没有以最恰当的方式做事。无论如何,我希望以上节省一些时间!

答案 1 :(得分:3)

我遇到了同样的问题,最后我把它变成了一个文本字段。我预先填充了文本字段以向用户显示正确的格式,并添加了检查(使用try以确保字段在执行任何操作之前已正确格式化。

来自UI.R

textInput("fromDatetime", "From:", value = "9999-99-99 99:99:99" )

然后在server.R

  fromDTtry = try(as.POSIXct(fromDatetime))

  if (!(is.POSIXct(fromDTtry))) {
    return ("From date/time not formatted correctly")
  } else {
... }

我希望这会有所帮助。希望Shiny能尽快获得原生日期/时间支持。

答案 2 :(得分:3)

您现在可以使用包shinyTime直观地将时间输入到Shiny App中。目前它使用单独的数字输入,它们以%H:%M%H:%M:%S格式组合在一起。在R中获取和设置值是使用DateTime对象完成的。

示例用法(另请参阅example on shinyapps):

library(shiny)
library(shinyTime)

ui <- fluidPage(

   titlePanel("shinyTime Example App"),

   sidebarLayout(
      sidebarPanel(
        timeInput("time_input", "Enter time", value = strptime("12:34:56", "%T"))
      ),

      mainPanel(
        textOutput("time_output")
      )
   )
)

server <- function(input, output, session) {
  output$time_output <- renderText(strftime(input$time_input, "%T"))
}

shinyApp(ui, server)

免责声明:我是套餐作者。欢迎提出反馈和建议!