gpt4 book ai didi

r - 一个 Shiny 的应用程序中的多个reactiveValues

转载 作者:行者123 更新时间:2023-12-03 16:53:13 27 4
gpt4 key购买 nike

我用 reactiveValues在 Shiny 中很多,因为它们比 input 更灵活和 output对象。嵌套的reactiveValues 很棘手,因为任何 child 的任何变化也会触发与 parent 相关的 react 。为了解决这个问题,我尝试制作两个不同的 reactiveValues对象(不是同一个列表中的两个对象,而是完全不同的两个列表),它似乎正在工作。我找不到任何这样的例子,想知道它是否应该以这种方式工作。是否有任何可能因此出现的问题?

在这个应用程序中,有两个 react 值对象 - reac1reac2 .它们中的每一个都链接到一个下拉菜单,column1column2分别。换 column1column2使用最新时间更新 react 值,更新绘图,并在 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 就像 input$ 的读/写版本,您可以在一个 reactValue 列表中包含多个“独立”变量。因此,您的示例中不需要两个 react 值。请参阅下面的代码。

ui = fluidPage(
titlePanel("Multiple reactive values"),
sidebarLayout(
sidebarPanel(
selectInput(inputId = "column1", "Reac1", letters, selected = "a"),
selectInput(inputId = "column2", "Reac2", letters, selected = "a")
),
mainPanel(
verbatimTextOutput("txt1"),
verbatimTextOutput("txt2")
)
)
)

server = function(input, output, session) {
reac <- reactiveValues()
#reac2 <- reactiveValues(qweqwe = 0)

# If any inputs are changed, set the redraw parameter to FALSE

observe({
reac$asdasd = input$column1
})
observe({
reac$qweqwe = input$column2
})

# Only triggered when the copies of the inputs in reac are updated
# by the code above
output$txt1 <- renderPrint({
print('output 1')
print(paste(reac$asdasd, 'reac1'))
})

output$txt2 <- renderPrint({
print('output2')
print(paste(reac$qweqwe, 'reac2'))
})

}
shinyApp(ui, server)

关于r - 一个 Shiny 的应用程序中的多个reactiveValues,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40283682/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com