在反应 function/context 之外更改变量

Change variable outside of reactive function/context

我正在寻找一种更改变量的方法,该变量已在 shiny 应用程序的反应性上下文之外进行了初始化。

含义:我有两个变量需要设置,具体取决于闪亮应用程序中发生的情况,TRUEFALSE

这需要通过反应函数来完成。

示例:

a <- FALSE
c <- FALSE

observeEvent(input$test, { #this triggers c to change to TRUE
    a <- FALSE
    c <- TRUE
)}

有些用户点击按钮 label test

> c
> TRUE

如果我正确理解你的问题(你不能在 observeEvent 函数中更新 c),你需要将你的 c 变量放在一个反应​​中并在 observeEvent:

variables = reactiveValues(a = FALSE, c = FALSE)

observeEvent(input$test, {
    variables$a = FALSE
    variables$c = TRUE
})

然后您可以在您的代码中使用 variables$c,如果您按下按钮(例如绘图),任何依赖于 variables 的内容都会更新。

如果要更改父环境中的变量,请使用 <<- 运算符(有关详细信息,请参阅 ?"<-"):

ui <- fluidPage(
  actionButton("btn_change", "Change Values"),
  actionButton("btn_print","Print values")
)

server <- function(input, output) {
  a <- F
  c <- F

  observeEvent(input$btn_change, {
    a <<- F
    c <<- T
  })

  observeEvent(input$btn_print, {
    cat("a =",a,"c =",c,"\n")
  })
}

shinyApp(ui, server)

在此示例中,ac 是每个会话的 shiny 全局变量。