【问题标题】:In timevis + Shiny, can I do operations with input variable input$mytime_window?在 timevis + Shiny 中,我可以使用输入变量 input$mytime_window 进行操作吗?
【发布时间】:2019-02-02 19:31:15
【问题描述】:

在 R 包 timevis 中,输入值 input$mytime_window“将返回一个 2 元素向量,其中包含当前在时间轴中可见的最小和最大日期。”我想在最小值上加上五天,并在setWindow() 函数中使用结果,该函数本身将成为observeEvent 的一部分。理想情况下,时间线视图会跳转到新的日期范围。

在我的实验中,setWindow() 将设置一个具有input$mytime_window[1] 值的视图,例如,开始日期,然后我可以使用日期字符串或类似Sys.Date() 的函数作为结束日期,并得到预期的结果。但我似乎无法在 input$mytime_window 值上使用运算符或函数。我所有试图找出input$mytime_window 的值的尝试都显示了一个空值。

即使我问的是不可能的问题,我也可能对input$mytime_window 的价值及其运作方式感到非常困惑;我想更好地理解这一点。

下面的最小代码:

library(shiny)
library(timevis)

# Minimal example derived from https://daattali.com/shiny/timevis-demo/

data <- data.frame(
  id      = 1:4,
  content = c("Item one", "Item two",
              "Ranged item", "Item four"),
  start   = c("2016-01-10", "2016-01-11",
              "2016-01-20", "2016-02-14 15:00:00"),
  end     = c(NA, NA, "2016-02-04", NA)
)

ui <- fluidPage(

  actionButton("action", label = "Action"),

  timevisOutput("timeline")

)

server <- function(input, output) {

      output$timeline <- renderTimevis({
        timevis(data)
      })

      # Trying to use input$mytime_window as a value in setWindow()
      # The code below gives no result
      # But replace the line with: 
      # setWindow("timeline", input$mytime_window[1], Sys.Date())
      # And I get an expected result (just not the one I want)

      observeEvent(input$action, {
        setWindow("timeline", input$mytime_window[1], input$mytime_window[1]+5)
      })

  }

shinyApp(ui = ui, server = server)

我也尝试过转换 input$mytime_window 并使用包 lubridate 将其添加到 days(5)。两者都会产生错误消息。

感谢您的帮助,是的,这是我的第一篇文章,所以即使我没有找到解决方案,我也会庆祝!

【问题讨论】:

  • 您应该使用 input$timeline_window 来引用输入值,因为 'timeline' 是您在 timevisOutput("timeline") 中定义的 id
  • 是的,这行得通。有问题的行现在显示为:setWindow("timeline", input$timeline_window[1], as.Date(input$timeline_window[2])+(5))。奇怪的是,错误的输入变量在某些情况下给出了正确的答案,但它不会打扰我前进。谢谢@KeqiangLi !!!

标签: r shiny


【解决方案1】:

@KeqiangLi 提供的评论回答了这个问题。需要帮助的行现在显示为:

setWindow("timeline", input$timeline_window[1], as.Date(input$timeline_window[1])+5)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-29
    • 2011-10-08
    • 1970-01-01
    • 2019-02-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多