Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 在反应功能/上下文之外更改变量_R_Reactive Programming_Shiny - Fatal编程技术网

R 在反应功能/上下文之外更改变量

R 在反应功能/上下文之外更改变量,r,reactive-programming,shiny,R,Reactive Programming,Shiny,我正在寻找一种方法来更改一个变量,该变量已在一个闪亮的应用程序的反应性上下文之外初始化 意思:我有两个变量需要设置,具体取决于闪亮应用程序中发生的情况,TRUE或FALSE 这需要从反应函数的角度来完成 例如: a <- FALSE c <- FALSE observeEvent(input$test, { #this triggers c to change to TRUE a <- FALSE c <- TRUE )} 如果我正确理解了您的问题(您

我正在寻找一种方法来更改一个变量,该变量已在一个闪亮的应用程序的反应性上下文之外初始化

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

这需要从反应函数的角度来完成

例如:

a <- FALSE
c <- FALSE

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

如果我正确理解了您的问题(您无法在
observeEvent
函数中更新
c
),则需要将
c
变量放入反应式中,并在
observeEvent
中更改它:

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

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

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

如果您想在父环境中更改变量,请使用
,那么您的问题是什么?
c
变量是否未更改?啊,我不知道您可以在其中存储多个变量!:)在我的答案中有一个可行的替代方案,因此我会避免在这种情况下使用
,我看不出有任何危害。如果提问者不打算与观察者一起监控这些变量,那么在我的理解中,这不是有意使用reactiveValues(),而是给程序增加了不需要的额外负载。
variables = reactiveValues(a = FALSE, c = FALSE)

observeEvent(input$test, {
    variables$a = FALSE
    variables$c = TRUE
})
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)