【发布时间】:2017-03-10 01:59:46
【问题描述】:
我在 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 比其他闪亮的表达式更方便,尽管它们在闪亮的文档和示例中没有很好的记录。看看这个问题stackoverflow.com/questions/39436713。在您的特定示例中,它确实适用于单个反应值。您能否展示您所指问题的代码示例?
-
为了保持我的变量井井有条,我希望有一个列表作为 reactiveValue 的元素之一(类似于
reactveValues(somelist = list(a = 1, b = 1, c = 1)))。该列表将包含多个元素,这些元素将在各个地方使用。现在,如果我更新这个列表中的一个元素,比如a,那么反应似乎会传递给somelist。因此,即使b没有改变,任何其他调用somelist$b的块也会被触发。 -
@TheComeOnMan 你有没有找到解决多个反应值的方法?我有同样的问题 - 嵌套列表不起作用(正如你所指出的)