我想将具有多个固定值的slideInput添加到Shiny应用程序中,以显示实验的测量日期。日期间隔是随机的。

这是我的测试代码,要在sliderInput中显示四个日期。

library(shiny)
values <- as.Date(c('2015-1-1, 2015-6-20', '2015-7-2', '2016-1-1'))
ui <- shinyUI(bootstrapPage(
    headerPanel("test"),
        sliderInput("foo", "Animation duration",
                    min = as.Date('2015-1-1'),
                    max = as.Date('2016-1-1'),
                    value = values,
                    timeFormat = '%d/%m/%Y')
    ))

server <- shinyServer(function(input, output, session) {
})

shinyApp(ui = ui, server = server)


值也可以在server.R中更新。

selectInput可能是另一种选择,但我更喜欢使用sliderInput来确定日期。

我想我必须操纵一些js脚本,但是对此没有经验。

感谢您提出实施建议。

最佳答案

您确实可以使用一些javascript

library(shiny)

ui <- shinyUI(bootstrapPage(
  headerPanel("test"),

  sliderInput("bar", "bar dates", min=0, max=4, value=c(0,4)),

  tags$head(tags$script(
    HTML("
            $(function() {
              setTimeout(function(){
              var vals = ['2015-1-1', '2015-6-20', '2015-7-2', '2016-1-1'];
            $('#bar').data('ionRangeSlider').update({'values':vals})
            }, 5)})")))

))

server <- shinyServer(function(input, output, session) {

})

shinyApp(ui = ui, server = server)




或者,如果您希望将值添加到服务器端:

library(shiny)

ui <- shinyUI(bootstrapPage(
  headerPanel("test"),

  sliderInput("bar", "bar dates", min=0, max=3, value=c(0,3)),
  uiOutput("bar_dates")
))

server <- shinyServer(function(input, output, session) {

  values <- paste0("'", paste0(c('2015-1-1', '2015-6-20', '2015-7-2', '2016-1-1'), collapse="','"), "'")

  output$bar_dates <- renderUI({

    tags$head(tags$script(
      HTML(sprintf("
            $(function() {
              setTimeout(function(){
              var vals = [%s];
            $('#bar').data('ionRangeSlider').update({'values':vals})
            }, 5)})", values))))

  })
})

shinyApp(ui = ui, server = server)


更新资料

我刚刚看到您的other question与此非常相似,其答案激发了我编写的其他代码。

09-17 21:11