Big*_*ist 5 select r input shiny
我的server.R具有以下代码,我希望我的Shiny应用程序可以根据“国家/地区选择”来选择“州”,但是它在第二行中显示了所有州。我猜这里,observe只是观察到不执行任何操作。
shinyServer(function(input, output, session) {
observe({
ddf = df[df$Date>=input$daterange[1] & df$Date<=input$daterange[2],]
updateSelectInput(session, "Country", choices = ddf$Country)
ddf1 = subset(ddf, grepl(input$Country, ddf$State))
updateSelectInput(session, "State", choices = ddf1$State)
})
}
Run Code Online (Sandbox Code Playgroud)
基于以上选择,我想传递一些数据框进行绘图。当我选择其他国家/地区时,它将更改状态列表一秒钟,然后返回所有第一国家/地区的状态列表。如果有人可以在此举一个例子,我真的很感激。我的ui.R代码如下
sidebarPanel(
wellPanel(dateRangeInput("daterange", "Date range:",
Sys.Date()-10,
Sys.Date()+10)),
wellPanel(selectInput("Country", "Select a Country:",
'')),
wellPanel(selectInput("State", "Select a State:",
'')))
Run Code Online (Sandbox Code Playgroud)
我认为您的观察者中可能有冲突,因为其中包含输入input$Country的更新程序Country。然后,我尝试将其拆分为两个观察者,并使用电抗性导体ddf仅制造一次。
get_ddf <- reactive({
df[df$Date>=input$daterange[1] & df$Date<=input$daterange[2],]
})
observe({
updateSelectInput(session, "Country", choices = get_ddf()$Country)
})
observe({
ddf1 = subset(get_ddf(), grepl(input$Country, get_ddf()$State))
updateSelectInput(session, "State", choices = ddf1$State)
})
Run Code Online (Sandbox Code Playgroud)
此外,您是否不应该在choices参数中使用列的级别而不是列本身?
observe({
updateSelectInput(session, "Country", choices = levels(droplevels(get_ddf()$Country)))
})
observe({
ddf1 = droplevels(subset(get_ddf(), grepl(input$Country, get_ddf()$State)))
updateSelectInput(session, "State", choices = levels(ddf1$State))
})
Run Code Online (Sandbox Code Playgroud)
如果Country和State列不是因素而是字符,请使用unique()代替levels(droplevels())。