【问题标题】:Shiny real-time url data does not update闪亮的实时 url 数据不更新
【发布时间】:2018-11-17 17:06:13
【问题描述】:

我正在将来自两个 url 的实时数据读入 Shiny 并显示最后更新的 8 条记录。不过Shiny的数据不是最新的,

即显示前几天的记录,与url的实时记录不一致,

除非我再次在浏览器中粘贴并打开/刷新网址。我想知道这是否是缓存的问题,我应该如何更改我的代码?

library(shiny)
shinyApp(
  ui <- fluidPage(
    column(3,
    selectInput("station", "Select station",
                c("a", "b")),
    tableOutput("table")
    )
  ),


  server <- function(input, output) {
    df <- eventReactive(input$station, {
     if (input$station == "a") {
      tail(read.csv("https://datagarrison.com/users/300234062103550/300234062107550/temp/Dawson_Creek__008.txt",
                       sep = "\t", skip = 2)[, c("Date_Time", "Rain_2440445_mm")], 8)


     } else {
    tail(read.csv("http://datagarrison.com/users/300234062103550/300234064336030/temp/10839071_004.txt",
             sep = "\t", skip = 2)[, c("Date_Time", "Rain_2007476_mm")], 8)
      }})
    output$table <- renderTable(
    df()
  )
})

更新: 原来是服务器本身遇到了更新问题,而不是代码。但是,答案显示了一种有用的方法。

【问题讨论】:

  • 当您更改输入选项时,代码是否会更新?假设 a 已过时,如果将输入切换为 b,是否会显示更新的表格?
  • @Chabo 我试过了,更新后的表格不会在新点击时显示(表格 a 或 b)。
  • 可以加个按钮吗?这很容易强制更新发生。
  • 我将探索该选项。那会是一个操作按钮吗?
  • 我已经更新了我的答案以展示这种方法

标签: r url caching shiny reactive


【解决方案1】:

参见http://shiny.rstudio.com/gallery/timer.html,使用它我们可以继续每秒刷新闪亮,从而跟上任何更新。注意我会清除您的工作会话以确保您没有读取任何隐藏变量。

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

  ....

  output$table <- renderTable({
  invalidateLater(1000, session)
  df()
  })

 }

请注意,output$table&lt;- renderTable 需要 ({ 而不仅仅是 ( 才能在闪亮中被视为反应性,您当前的代码可能会显示您以前创建的表。

这是您使用操作按钮强制刷新的代码(注意:替换 URL)

library(shiny)
 shinyApp(
  ui <- fluidPage(
    column(3,
       selectInput("station", "Select station",
                   c("a", "b")),
       tableOutput("table"),
       #add action button
       actionButton("button","Refresh")
  )
 ),


server <- function(input, output) {
#trigger rest of code based on button being pressed.
observeEvent(input$button,{

  if (input$station == "a") {
    df<-tail(read.csv("URL",sep = "\t", skip = 2)[, c("Date_Time", 
    "Rain_2440445_mm")], 8)  

 } else {
    df<-tail(read.csv("URL",sep = "\t", skip = 2)[, c("Date_Time", 
    "Rain_2007476_mm")], 8)

}#close if/else()



output$table <- renderTable({
  df
   }) # close renderTable()

  })#close observeEvent()
 } #close server
) #close shiny app

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-13
    • 2017-12-05
    • 1970-01-01
    • 2019-03-18
    • 2021-03-02
    • 2020-10-25
    • 2018-03-03
    • 2022-01-09
    相关资源
    最近更新 更多