Как сделать локальную переменную глобальной в R, используя Shiny? - PullRequest
0 голосов
/ 20 октября 2018

Я впервые использую Shiny, поэтому извините, если это слишком просто.

У меня есть глобальная функция с именем some_global_function(), и я вызываю ее всякий раз, когда нажимается actionButton с именем ok_input.Это создает локальную переменную с именем algorithm_output.

. Теперь я хочу иметь возможность доступа к этой переменной всякий раз, когда нажимается другая actionButton (ok_means), но без вызовафункция some_global_function() снова.

Есть ли способ сделать это?Код будет выглядеть примерно так:

server <- function(input, output) {
  out_plots <- eventReactive(input$ok_input, {

    #### I call the function here and this is the variable I want
    #### to make global ########################################
    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)

    #### I want to access the variable here ################
    matplot(algorithm_output$means[[k-1]], type = "l", lty=1)
    ########################################################

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

1 Ответ

0 голосов
/ 21 октября 2018

Просто создайте переменную вне любой подфункции и обновите ее значение, используя <<-.Эта переменная будет глобальной для каждого сеанса.

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()
  })
}
...