我正在创建一个有 2 个输出的闪亮应用程序datatableoutput
and plotoutput
.我有2个变量st
and et
在将初始化为值的数据框中,我需要向具有以下逻辑的现有数据框添加新行
1. 新st
值是之前的值et
.
2. 新et
值是之前的值st - 1000
.
3.新的价值st
and et
应该在之后添加为我的数据框中的新行
每 5 秒一次。
根据新添加的行,折线图应该得到更新。
下面是我的 ui.r 和 server.r 代码,目前我能够创建新的值st
and et
根据逻辑但未能添加新行并绘制图表
Ui.r
library(shiny)
shinyUI(fluidPage(
titlePanel("Incremental Plots"),
sidebarLayout(
sidebarPanel(),
mainPanel(
tableOutput('var')
)
)
))
Server.r
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())
})
您可以使用以下组合reactiveVal https://shiny.rstudio.com/reference/shiny/1.0.2/reactiveVal.html and observe
为了那个原因。请注意,您可以调用 a 的值reactiveVal
named x
with x()
,您可以将其值设置为y
通过做x(y)
。下面给出了一个工作示例,希望对您有所帮助!
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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)