在反应 function/context 之外更改变量
Change variable outside of reactive function/context
我正在寻找一种更改变量的方法,该变量已在 shiny 应用程序的反应性上下文之外进行了初始化。
含义:我有两个变量需要设置,具体取决于闪亮应用程序中发生的情况,TRUE
或 FALSE
。
这需要通过反应函数来完成。
示例:
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)
在此示例中,a
和 c
是每个会话的 shiny 全局变量。
我正在寻找一种更改变量的方法,该变量已在 shiny 应用程序的反应性上下文之外进行了初始化。
含义:我有两个变量需要设置,具体取决于闪亮应用程序中发生的情况,TRUE
或 FALSE
。
这需要通过反应函数来完成。
示例:
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)
在此示例中,a
和 c
是每个会话的 shiny 全局变量。