我在Shiny中使用reactiveValues
很多,因为它们比只有input
和output
对象更灵活。嵌套reactiveValues是棘手的,因为任何孩子的任何变化都会触发与父母相关的反应性。为了解决这个问题,我试图制作两个不同的对象(不是同一个列表中的两个对象,而是两个不同的列表),它似乎正在工作。我无法找到任何这方面的例子,并想知道它是否应该以这种方式工作。是否有可能因此发生的问题?在一个闪亮的应用程序中的多个reactiveValues
在这个应用程序中,有两个反应值对象 - reac1
和reac2
。它们中的每一个分别链接到一个下拉列表,分别为column1
和column2
。更改column1
或column2
将使用最新时间更新反应值,更新绘图并在reac1
和reac2
中打印最新值。
ui = fluidPage(
titlePanel("Multiple reactive values"),
sidebarLayout(
sidebarPanel(
selectInput(inputId = "column1", "Reac1", letters, selected = "a"),
selectInput(inputId = "column2", "Reac2", letters, selected = "a")
),
mainPanel(
plotOutput("plot1")
)
)
)
server = function(input, output, session) {
reac1 <- reactiveValues(asdasd = 0)
reac2 <- reactiveValues(qweqwe = 0)
# If any inputs are changed, set the redraw parameter to FALSE
observe({
input$column2
reac2$qweqwe = Sys.time()
})
observe({
input$column1
reac1$asdasd = Sys.time()
})
# Only triggered when the copies of the inputs in reac are updated
# by the code above
output$plot1 <- renderPlot({
print(paste(reac1$asdasd, 'reac1'))
print(paste(reac2$qweqwe, 'reac2'))
hist(runif(1000))
})
}
shinyApp(ui, server)
我同意,我发现reactiveValues在许多情况下比其他闪亮的表达式更方便,尽管它们在闪亮的文档和示例中没有很好的记录。看看这个问题http://stackoverflow.com/questions/39436713。在您的特定示例中,它可以与单个reactiveValue一起使用。你能展示一个你提到的问题的代码示例吗? –
为了保持我的变量有组织,我希望有一个列表作为reactiveValue的一个元素(类似'reactveValues(somelist = list(a = 1,b = 1,c = 1))') 。该列表将具有多个在各个地方使用的元素。现在如果我更新这个列表中的一个元素,说'a',那么反应性似乎被传递给'somelist'。因此,即使'b'没有改变,任何其他的块调用'somelist $ b'也会被触发。 – TheComeOnMan