r - 如何使用新数据自动更新 Shiny 的应用程序?

标签 r shiny auto-update

我想在 Shiny 的应用程序中强制使用 highcharter 图表来绘制来自 Mysql 数据库的新数据。我尝试过不同的方法,但似乎都不起作用。 首先,我通过 globalR 中的库(RMySQL)和库(池)连接到sql

#--------Connect to SQL----------#

pool <- dbPool(
  drv = RMySQL::MySQL(),
  dbname = "xxx",
  host = "x.x.x.x",
  username = 'xxxx',
  password = 'xxxx'
)

sql1 <- 'SELECT * FROM `results` WHERE `datetime` >= NOW() - INTERVAL 1 DAY'

query1 <- sqlInterpolate(pool, sql1)

notifier1 <- dbGetQuery(pool, sqlInterpolate(pool,'SELECT * FROM `results` WHERE `datetime` >= NOW() - INTERVAL 1 DAY' ))

lapply(dbListConnections( dbDriver( drv = "MySQL")), dbDisconnect)

然后我创建 2 个数据框

all1 <- as.data.frame(notifier1%>% group_by(datetime, customer) %>% count(ping) %>% filter(datetime > Sys.time()-14400) %>%
             mutate(percent = (round(100 * n/sum(n), 1))) %>% filter(ping=='1') %>% arrange(desc(datetime)))


 all1_new <- transform(all1,datetime=as.numeric(as.POSIXct(datetime))*1000)

在我尝试过的服务器中:

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

     observeEvent(invalidateLater(60000, session),{
             notifier1 <- dbGetQuery(pool, sqlInterpolate(pool,'SELECT * FROM `results` WHERE `datetime` >= NOW() - INTERVAL 1 DAY' ))

             all1 <- as.data.frame(notifier1%>% group_by(datetime, customer) %>% count(ping) %>% filter(datetime > Sys.time()-14400) %>% 
                                        mutate(percent = (round(100 * n/sum(n), 1))) %>% filter(ping=='1') %>% arrange(desc(datetime)))


             all1_new <- transform(all1,datetime= as.numeric(as.POSIXct(datetime))*1000)
     })

以及我需要每隔例如 1 分钟显示一次新数据的 highchart 代码:

output$Plot1 <- renderHighchart ({

        # invalidateLater(60000,session)



    highchart() %>%
         hc_chart(type = "container",
                  zoomType= "x"
         ) %>%
         #axis
         hc_xAxis(type='datetime',
                  # categories=c(min2$datetime),
                  labels = list(rotation = 90,
                                format = '{value:%e-%b %H:%M}'),
                  showLastLabel = TRUE
         ) %>% 
         hc_yAxis(opposite = FALSE, 
                  title = list(text = "Call Success"),
                  labels = list(format = "{value}%", style=list(fontSize='13px')), max = 100) %>% 
         hc_add_series(all1_new, "spline", hcaes(x=datetime, y=percent, group=customer)
         )%>%
      })

最佳答案

它可能看起来像:

check_db_update <- function() {
  dbGetQuery(pool, sqlInterpolate(pool, 
    'SELECT COUNT(*) FROM `results`' 
  ))
}

get_data_from_db <- function() {
  dbGetQuery(pool, sqlInterpolate(pool,
    'SELECT * FROM `results` WHERE `datetime` >= NOW() - INTERVAL 1 DAY' 
  ))
}

server <- function(input, output, session) {
  data_rx <- 
    reactivePoll(intervalMillis = 6e4, session = session,
                 checkFunc = check_db_update, valueFunc = get_data_from_db)

  data_wrangled_rx <- reactive({
    data_rx() %>% 
      group_by(datetime, customer) %>% 
      count(ping)
    # ...
  })

  output$Plot1 <- renderHighchart ({
    highchart() %>% 
      hc_add_series(data = data_wrangled_rx())
    # ...
  })

  # ...
}

关于r - 如何使用新数据自动更新 Shiny 的应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58233666/

相关文章:

c# - 签署自动下载的exe

r - 在 R 中运行单行代码的快捷方式

r - 从字符串中提取状态缩写和邮政编码

R Shiny 应用程序找不到本地加载的数据。为什么?

从 Shiny 将数据帧读入单独的函数中

c# - Windows/.NET 自动更新框架功能集和安全性

r - R 中的IGRAPH : Find the path between vertices that maximizes the product of edge attributes

大数据集上的随机森林

r - ShinyBS bsPopover 和 updateSelectInput

C++ 后台更新