如何使用Shiny在R中使局部变量成为全局变量?

时间:2018-10-20 19:12:09

标签: r scope shiny global-variables local-variables

这是我第一次使用Shiny,如果这太基础了,就对不起。

我有一个名为some_global_function()的全局函数,每当按下名为actionButton的{​​{1}}时,我就会调用它。这将创建一个名为ok_input的局部变量。

现在,我希望每当按下另一个 algorithm_outputactionButton)时就可以访问该变量,但又不必再次调用函数ok_means

有办法吗?该代码将是这样的:

some_global_function()

1 个答案:

答案 0 :(得分:0)

只需在任何子函数外部创建变量,然后使用<<-更新其值。该变量在每个会话中都是全局变量。

server <- function(input, output) {

  # init variable here
  algorithm_output <- NULL

  out_plots <- eventReactive(input$ok_input, {

    # to modify a global variable use <<- instead of <- or =
    algorithm_output <<- some_global_function(3, 2, 1)

    do.call("grid.arrange", c(algorithm_output$indexes, nrow=3))
  })

  output$indexes <- renderPlot({
    out_plots()
  })

  out_means <- eventReactive(input$ok_means, {
    k = as.integer(input$k)

    # you can get access to the updated value of your variable
    matplot(algorithm_output$means[[k-1]], type = "l", lty=1)

  })
  output$means <- renderPlot({
    out_means()
  })
}