[英]Unexpected reactivity while using multiple reactiveVal in Shiny
我在Shiny中使用多个reactiveVal时遇到了意外行为。 我知道反应值的存在,这可能会解决我的问题,但我仍然想知道为什么会发生这种行为。 在下面的代码中,我有两个reactiveVals:
my_plot仅依赖于reval2。 因此我希望它永远不会失效。 然而,情节每秒都在变化。 在文档中 ,我没有看到任何提及使用两个reactiveVal的不可能性。 我误解或忽略了什么吗?
server <- function(input, output, session) {
set.seed(1)
reval1<- reactiveVal(runif(1)) # useful
reval2 <- reactiveVal(runif(1)) # useless
# update reval1 every second
autoInvalidate <- reactiveTimer(intervalMs = 1000, session = session)
observeEvent(autoInvalidate(),{
reval1(reval1()+1)
})
# plot is only dependent on reval2.
output$my_plot<- renderPlot({
a<- reval2()
df= data.frame(x=runif(10),y=runif(10))
plot(df$x,df$y)
})
}
ui <- shinyUI(
fluidPage(
plotOutput("my_plot")
)
)
shinyApp(ui,server)
这是一个已知的问题。 并应修复新版本的闪亮。 dev版本中已经实现了修复。 注意我自己没有测试过......
这真的很有趣,我甚至会在这种情况下提交一个错误。 我试着重写那个
server <- function(input, output, session) {
set.seed(1)
reval1 <- reactiveVal(runif(1)) # useful
reval2 <- reactiveVal(runif(1)) # useless
# update reval1 every second
autoInvalidate <- reactiveTimer(intervalMs = 1000)
observe({
autoInvalidate()
reval1(reval1() + 1)
print(reval1())
})
# plot is only dependent on reval2.
output$my_plot<- renderPlot({
a <- reval2()
df <- data.frame(x=runif(10),y=runif(10))
plot(df$x, df$y)
})
}
把它放在一些浏览器中,在这里,情节甚至没有渲染。 你还可以看到,在运行时, observe()
和output$my_plot
在一个循环中被触发,并且持续时间比1000ms短得多! 顺便说一下,这是反应曲线:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.