我目前正在开发一个shiny 的应用程序,其中我有一个包含列表的reactive Value.我正在try 更新此列表的一部分,而不触发依赖它的其他事件.

在下面的示例中,我希望button_Aa not to触发text_Ab,同样button_Ab not to触发text_Aa.我试着使用isolate,但没有成功.

我知道我可以为我的列表中的每个元素(例如,reactiveValues(A = 1, Aa = 1, Ab = 1))创建单独的react 值,但这种方法会带来一系列问题,特别是在试图删除它的一些元素时(参见here).因此,我想知道在这种情况下是否有解决办法.

library(shiny)

ui <- fluidPage(
  actionButton("button_Aa", "Update Aa"),
  actionButton("button_Ab", "Update Ab"),
  p('A'),
  verbatimTextOutput("text_A"),
  p('Aa'),
  verbatimTextOutput("text_Aa"),
  p('Ab'),
  verbatimTextOutput("text_Ab")
)

server <- function(input, output, session) {
  rv <- reactiveValues(A = list(a = 1, b = 1))
  
  observeEvent(input$button_Aa, {
    rv$A$a <- rv$A$a + 1
  })
  
  observeEvent(input$button_Ab, {
    rv$A$b <- rv$A$b + 1
  })
  
  output$text_A <- renderPrint({
    rv$A
    rnorm(1)
  })
  
  output$text_Aa <- renderPrint({
    rv$A$a
    rnorm(1)
  })
  
  output$text_Ab <- renderPrint({
    rv$A$b
    rnorm(1)
  })
}

shinyApp(ui, server)

推荐答案

我建议使用bindEvent:

library(shiny)

ui <- fluidPage(
  actionButton("button_Aa", "Update Aa"),
  actionButton("button_Ab", "Update Ab"),
  p('A'),
  verbatimTextOutput("text_A"),
  p('Aa'),
  verbatimTextOutput("text_Aa"),
  p('Ab'),
  verbatimTextOutput("text_Ab")
)

server <- function(input, output, session) {
  rv <- reactiveValues(A = list(a = 1, b = 1))
  
  observeEvent(input$button_Aa, {
    rv$A$a <- rv$A$a + 1
  })
  
  observeEvent(input$button_Ab, {
    rv$A$b <- rv$A$b + 1
  })
  
  output$text_A <- renderPrint({
    rv$A
  })
  
  output$text_Aa <- renderPrint({
    rv$A$a
  }) |> bindEvent(input$button_Aa, ignoreNULL = FALSE)
  
  output$text_Ab <- renderPrint({
    rv$A$b
  }) |> bindEvent(input$button_Ab, ignoreNULL = FALSE)
}

shinyApp(ui, server)

R相关问答推荐

将一个载体的值相加,直到达到另一个载体的值

列出用m n个值替换来绘制n个数字的所有方法(i.o.w.:R中大小为n的集合的所有划分为m个不同子集)

按R中的组查找相邻列的行累积和的最大值

从gtsummary包中使用tBL_strata()和tBL_summary()时删除变量标签

大规模重新标记haven标签数据

然后根据不同的列值有条件地执行函数

使用R中的正则表达式将一列分割为多列

如何指定我的函数应该查找哪个引用表?

计算数据帧中指定值之前的行数,仅基于每行之后的future 行,单位为r

您是否可以使用facet_rap设置一个较低的限制来对ggmap上的比例中断进行zoom ?

有没有一种方法可以同时对rhandsontable进行排序和从rhandsontable中删除?

减go R中列表的所有唯一元素对

创建列并对大型数据集中的特定条件进行成对比较的更高效程序

如何删除设置大小的曲线图并添加条形图顶部数字的百分比

基于R中的辅助向量中的值有条件地连接向量中的字符串

主题(Legend.key=Element_RECT(Fill=&Quot;White&Quot;))不起作用

conditionPanel不考虑以下条件

在shiny 表格中输入的文本在第一次后未更新

根据用户输入更改标记大小和 colored颜色 (R)

R中的交叉表