Блестящие данные URL в реальном времени не обновляются - PullRequest
0 голосов
/ 07 июня 2018

Я читаю в режиме реального времени данные из двух 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()
  )
})

Обновление: Оказалось, что сам сервер испытывает проблему обновления вместокод.Тем не менее, ответ показывает полезный подход.

1 Ответ

0 голосов
/ 07 июня 2018

См. http://shiny.rstudio.com/gallery/timer.html, используя это, мы можем продолжать обновлять каждую секунду, поэтому следите за обновлениями.Примечание. Я бы очистил ваш рабочий сеанс, чтобы убедиться, что вы не читаете ни одной скрытой переменной.

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

  ....

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

 }

Обратите внимание, что output$table<- 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
...