R 闪亮应用程序中的多个反应值

R 闪亮应用程序中的多个反应值,r,shiny,R,Shiny,我经常使用reactiveValues,因为它们比输入和输出对象更灵活。嵌套的反应性值很棘手,因为任何子对象中的任何更改都会触发与父对象链接的反应性。为了解决这个问题,我尝试创建两个不同的reactiveValues对象(不是同一个列表中的两个对象,而是总共两个不同的列表),它似乎工作正常。我找不到任何这样的例子,我想知道它是否应该以这种方式工作。是否有可能因此产生任何问题 在此应用程序中,有两个反应值对象-reac1和reac2。它们分别链接到一个下拉列表,column1和column2。更改

我经常使用
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)
ui=fluidPage(
titlePanel(“多个反应值”),
侧边栏布局(
侧栏面板(
选择输入(inputId=“column1”,“Reac1”,字母,selected=“a”),
选择输入(inputId=“column2”,“Reac2”,字母,selected=“a”)
),
主面板(
绘图输出(“绘图1”)
)
)
)
服务器=功能(输入、输出、会话){

reac1ReactiveValues类似于input$的读/写版本,在一个reactiveValue列表中可以有几个“独立”变量。因此,在示例中不需要两个ReactiveValues。请参阅下面的代码

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)
ui=fluidPage(
titlePanel(“多个反应值”),
侧边栏布局(
侧栏面板(
选择输入(inputId=“column1”,“Reac1”,字母,selected=“a”),
选择输入(inputId=“column2”,“Reac2”,字母,selected=“a”)
),
主面板(
逐字输出(“txt1”),
逐字输出(“txt2”)
)
)
)
服务器=功能(输入、输出、会话){

reac我同意,我发现在许多情况下,reactiveValue比其他闪亮的表达式更方便,尽管它们在闪亮的文档和示例中没有很好的文档记录。看看这个问题。在您的特定示例中,它只适用于一个reactiveValue。您能展示一个您所指问题的代码示例吗为了保持变量的有序性,我希望有一个列表作为reactiveValue的元素之一(类似于
reactivevalues(somelist=list(a=1,b=1,c=1))
)。这个列表将有多个元素在不同的地方使用。现在,如果我更新这个列表中的一个元素,比如说
a
,那么反应性似乎会传递给
somelist
。因此,调用
somelist$b
的任何其他块也会被触发,即使
b
没有改变。@TheComeOnMan你找到了吗多个reactiveValues的解决方案?我遇到了同样的问题-嵌套列表不起作用(正如您所指出的),正如我在评论中提到的,出于逻辑的考虑,我想合并其中一些值。在我的问题中,reac1和reac2是reactiveValues的两个逻辑组。合并它们的另一种方法是使用一个列表,
reactiveValues(somelist=list(a=1,b=1,c=1))
但这带来了我在评论中也提到的问题。我将尝试为此添加代码。