如何使用 Shiny 在 R 中使局部变量成为全局变量?
How to make a local variable global in R using Shiny?
这是我第一次使用 Shiny,如果这太基础了,请见谅。
我有一个名为 some_global_function()
的全局函数,每当按下名为 ok_input
的 actionButton
时,我都会调用它。这将创建一个名为 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()
})
}
只需在任何子函数之外创建变量并使用 <<-
更新其值。该变量对于每个会话都是全局的。
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()
})
}
这是我第一次使用 Shiny,如果这太基础了,请见谅。
我有一个名为 some_global_function()
的全局函数,每当按下名为 ok_input
的 actionButton
时,我都会调用它。这将创建一个名为 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()
})
}
只需在任何子函数之外创建变量并使用 <<-
更新其值。该变量对于每个会话都是全局的。
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()
})
}