情况:我有一个输入,您可以选择“小”或“大”,一个带有数据和另一个输入的csv文件,您可以从csv中选择一个列表,具体取决于你选择“小”还是“大”。
问题:我找不到在input$selecter
函数中访问变量updateSelectizeInput
的方法。
这是我的最小代码示例,但遗憾的是不起作用:
library(shiny)
ui=fluidPage(
selectInput('selecter', "Choose ONE Item", choices = c("small","big")),
selectizeInput('chooser', 'Choose SEVERAL Items', choices = NULL, multiple = TRUE)
)
server=function(input,output,session){
DatafromMytable=read.csv("mytable.csv", header=TRUE, sep=";")
# mysubset=subset(DatafromMytable,Size=="big") #
mysubset=subset(DatafromMytable,Size==input$selecter)
updateSelectizeInput(session, "chooser", choices = mysubset$Item)
}
shinyApp(ui, server)
问题:
我需要在行updateSelectizeInput(session, "chooser", choices = mysubset$Item)
中更改哪些内容才能使代码生效?
答案 0 :(得分:3)
您必须将变量mysubset
变为被动,然后使用mysubset()
调用其值。此外,只要发现updateSelectizeInput
发生了更改,您就需要一个能够触发mysubset()
的观察者。
以下示例。请注意,我已对您的read.csv
语句进行了注释,并添加了一些示例数据以制作您的示例reproducible。希望这有帮助!
library(shiny)
ui=fluidPage(
selectInput('selecter', "Choose ONE Item", choices = c("small","big")),
selectizeInput('chooser', 'Choose SEVERAL Items', choices = NULL, multiple = TRUE)
)
server=function(input,output,session){
#DatafromMytable=read.csv("mytable.csv", header=TRUE, sep=";")
DatafromMytable=data.frame(Size=c('small','small','big','big'),Item=c(1,2,3,4))
mysubset= reactive ({
subset(DatafromMytable,Size==input$selecter)
})
observeEvent( mysubset(),{
updateSelectizeInput(session, "chooser", choices = mysubset()$Item)
})
}
shinyApp(ui, server)
答案 1 :(得分:1)
最简单的解决方案似乎只是将具有反应变量的两行包裹在observe({ ... })
中。
observe({
mysubset=subset(DatafromMytable,Size==input$selecter)
updateSelectizeInput(session, "chooser", choices = mysubset$Item)
})