如何使用观察者更新全局变量?
我在开始时有一个空物种:
speciesChoices <- c()
但是我想在用户界面发生变化时向其中添加值,所以它变成:
speciesChoices <- c(
'PM2.5' = 'particles'
)
可以吗?
到目前为止我的代码...
ui.r:
speciesOptions <- selectInput(
inputId = "species",
label = "Species:",
choices = c(
# 'PM2.5' = 'particles',
# 'Humidity %' = 'humidity'
)
)
服务器.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。
使用类似
speciesChoices <<- setNames(input$species$code_name, input$species$public_name)
的东西。您需要超级赋值运算符 <<-
来更改全局变量,并且需要使用 input$_id_
来引用 ui 中设置的输入。
旁注:我不确定你的结局是什么,但请确保你确实想要使用观察者而不是反应者。要了解它们之间的差异,请参阅 Joe Cheng 在 useR2016 中的幻灯片。