首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在闪亮的仪表板中按一定的时间间隔将新行重新绑定到数据表?

如何在闪亮的仪表板中按一定的时间间隔将新行重新绑定到数据表?
EN

Stack Overflow用户
提问于 2018-06-12 08:10:14
回答 1查看 606关注 0票数 3

我正在创建一个具有两个输出的闪亮应用程序datatableoutputplotoutput.I在数据帧中有两个变量stet,该变量将被初始化为一个值,我需要向现有的具有以下逻辑的数据框架中添加新的行

代码语言:javascript
复制
 1. New `st` value is previous value of `et`.
 2. New `et` value is previous value of `st - 1000`.
 3. New value of`st` and `et` should be added as new row in my dataframe after         every 5 seconds.

基于新添加的行,线图应该得到更新。

下面是我的ui.r和server.r代码,目前我能够根据逻辑创建stet的新值,但未能添加新行并绘制图表

Ui.r

代码语言:javascript
复制
 library(shiny)

shinyUI(fluidPage(

 titlePanel("Incremental Plots"),

 sidebarLayout(
   sidebarPanel(),

   mainPanel(
      tableOutput('var')
    )
  )
))

Server.r

代码语言:javascript
复制
library(shiny)
start_time <- 100000
end_time <- start_time - 1000
shinyServer(function(input,output,session){
   omega <- reactive({
    invalidateLater(1000, session)

   #dataf <<- data.frame(st = c(start_time),et = c(end_time))
   return(dataf)
   })

  # update non reactive value
   observe({
    omega()
    start_time <<- end_time
    end_time <<- start_time - 1000
    dataf <<- data.frame(st = start_time,et = end_time)


  })

  output$var <- renderTable(omega())
})
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-12 08:52:14

为此,您可以使用reactiveValobserve的组合。请注意,您可以用reactiveVal调用名为xx()的值,并且可以通过执行x(y)将其值设置为y。下面给出了一个工作示例,希望这会有所帮助!

代码语言:javascript
复制
library(shiny)

ui<- shinyUI(fluidPage(

  titlePanel("Incremental Plots"),      
  sidebarLayout(
    sidebarPanel(),        
    mainPanel(
      tableOutput('var')
    )
  )
))

start_time <- 100000
end_time = start_time - 1000

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

  # Initialize
  reval_omega <- reactiveVal(data.frame(st = c(start_time),et = c(end_time)))
  reval_start <- reactiveVal(start_time)
  reval_end <- reactiveVal(end_time)

  # update our reactiveVal 
  observe({
    invalidateLater(1000, session) # every second
    isolate({
      reval_start(reval_end()) # set start time to current end time
      reval_end(reval_start() - 1000) # set end time to start - 1000
      omega_new <- data.frame(st = reval_start(),et = reval_end()) # create a new row for the dataframe
      reval_omega(rbind(reval_omega(),omega_new)) # rbind the reval_omega() and the new row, and store result in reval_omega()
    })
  })
  output$var <- renderTable(reval_omega())
}

shinyApp(ui,server)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50812251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档