闪亮的实时URL数据没有更新

4
我正在从两个URL实时读取数据到Shiny,并显示最近更新的8条记录。然而,在Shiny中显示的数据并不是最新的,即显示之前几天的记录,与URL的实时记录不一致,除非我再次粘贴、打开/刷新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
@Chabo 我已经尝试过了,更新后的表格在新的点击(表a或b)时没有显示出来。 - Jane
你能添加一个按钮吗?这将是强制更新的简单方法。 - Chabo
我会探索那个选项。那是一个操作按钮吗? - Jane
我已经更新了我的答案,展示了那种方法。 - Chabo
谢谢,代码运行得很好。但是它没有刷新页面,我开始怀疑问题出在URL上,而不是Shiny应用程序上。现在我将把问题标记为已解决。 - Jane
1个回答

2
请参考http://shiny.rstudio.com/gallery/timer.html,使用此方法可以每秒刷新shiny应用程序,从而跟上任何更新。请注意,为了确保您不读取任何隐藏的变量,建议先清除您的工作会话。
  server <- function(input, output,session) {

  ....

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

 }

请注意,output$table<- renderTable需要一个({而不仅仅是(,才能在shiny中被视为反应式的,您当前的代码可能会显示先前创建的表格。
这里是您的代码,使用动作按钮强制刷新(注意:替换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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接