[英]How to “remember” information from the previous iteration when using reactiveTimer in Shiny?
[英]R Shiny : Save previous reactive value while using reactiveTimer
這是一個玩具示例,其中我每秒繪制一個介於1和10之間的數字,並且只有當剛繪制的實際數字與之前繪制的數字之間的差值等於1時,我才想顯示這些數字。所以,如果繪制數字的順序是:[5,7,8,2,3]。 我想連續顯示[8,3]。 我想這都是關於反應值和隔離功能,但我無法實現我的想法。 我在評論中失敗了。
library(shiny)
ui <- shinyUI(fluidPage(
mainPanel(
textOutput("time"),
textOutput("num")
)
))
server <- function(input, output, session) {
autoInvalidate <- reactiveTimer(1000)
timestamp<-reactive({
autoInvalidate()
Sys.time()
})
random_num<-reactive({
autoInvalidate()
sample(x=seq(1,10),size = 1,replace = FALSE,pro)
})
# My attempt : obviously do not work
# values <- reactiveValues(old=1)
# observe({
# if (random_num()==values$old) {values$display=random_num()}
# else {values$old=random_num()}
# })
output$time <- renderText({paste("time :",timestamp())})
output$num <- renderText({paste("num :",random_num())})
#My attempt : obviously do not work
# output$num <- renderText({paste("num :",isolate(values$display))})
}
shinyApp(ui, server)
我知道有一個問題 ,它看起來像雷,但它是完全不同的。
這是一個例子。
library(shiny)
old <- NULL
ui <- shinyUI(fluidPage(
mainPanel(
textOutput("time"),
textOutput("num"),
textOutput("num_raw")
)
))
server <- function(input, output, session) {
autoInvalidate <- reactiveTimer(1000)
timestamp<-reactive({
autoInvalidate()
Sys.time()
})
random_num<-reactive({
autoInvalidate()
r <- sample(x=seq(1,10),size = 1,replace = FALSE)
})
observe({
output$time <- renderText({paste("time :",timestamp())})
r <- random_num()
if (!is.null(old) && r - old == 1) {
output$num <- renderText({paste("num :",r)})
}
output$num_raw <- renderText({paste("raw num : ", r)})
old <<- r
})
}
shinyApp(ui, server)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.