闪亮的观察者 - 如何使用观察者来更新全局变量?

时间:2016-10-26 09:02:37

标签: r shiny shiny-server

如何使用observer更新全局变量?

我开始时有一个空的物种:

speciesChoices <- c()

但是我想在ui上发生变化时添加值,所以它变为:

speciesChoices <- c(
    'PM2.5' = 'particles'
)

有可能吗?

我的代码到目前为止......

ui.r:

speciesOptions <- selectInput(
    inputId = "species",
    label = "Species:",
    choices = c(
        # 'PM2.5' = 'particles',
        # 'Humidity %' = 'humidity'
    )
)

server.r:

speciesChoices <- c() # global variable

# Define server logic required to draw a histogram
shinyServer(function(input, output, session) {

   observe({
        key <- input$streams1

        stream <- fromJSON(paste(server, "/output/stream?public_key=", key, sep=""),flatten=TRUE)
        species <- as.data.frame(stream$species)

        # Set choices of title and code for select input.
        speciesChoices <- setNames(species$code_name, species$public_name)

        updateSelectInput(session, "species", choices = speciesChoices)
    })

})

它只更新ui上的输入,但不更新服务器上的speciesChoices。

任何想法?

1 个答案:

答案 0 :(得分:2)

使用speciesChoices <<- setNames(input$species$code_name, input$species$public_name)之类的内容。您需要超级赋值运算符<<-来更改全局变量,并且需要使用input$_id_来引用在ui中设置的输入。

旁注:我不确定你的最终目标是什么,但要确保你真的想要使用观察者而不是被动反应。有关这些差异的概念,请参阅Joe Cheng's slides from useR2016