在过去,我使用了dateInput和滑块的组合来获取闪亮应用的日期和小时。我想知道现在是否有更好的选择,因为我需要收集最新的输入。
在线搜索没有帮助,所以要求SO。
由于
答案 0 :(得分:4)
自提出这个问题以来已经有一段时间了,但我猜它仍然有用,因为我还没有找到一个满意的答案来检索时间输入。
以下是检索时间输入的3个示例。
首先是我认为大多数人,包括我自己,已经或正在寻找。用于时间输入检索的闪亮的输入时间对象。它使用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个结果连接到返回适当的时间输入。
sliderInput("slider_hours", "Hours:", min=0, max=23, value=0, step = 1),
sliderInput("slider_mins", "Mins:",min = 0, max = 59, value = 0, step = 1)
最后,如果需要日期和时间格式,有些人可能不知道,因为我没有,滑块确实接受日期时间输入作为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")
对于那些不太熟悉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)
免责声明:我是套餐作者。欢迎提出反馈和建议!