【发布时间】:2020-04-07 14:20:35
【问题描述】:
我正在尝试创建两个闪亮的下拉菜单 - 一个是州列表,然后过滤第二个下拉列表,其中列出了所选州的所有县。以下代码有效,但是当您更改状态时县不会更新。
用户界面
pageWithSidebar(
headerPanel("My chart"),
sidebarPanel(
uiOutput("sel_state"),
uiOutput("sel_county")
),
mainPanel(
tableOutput("table")
)
)
服务器
function(input, output, session) {
output$sel_state <- renderUI({
selectizeInput('state', 'Select a State', choices=c("Choose One" = "", state_list))
})
output$sel_county <- renderUI({
county_list <- reactive({
df %>%
filter(state == input$state) %>%
pull(county) %>%
sort() %>%
as.character()
})
selectizeInput('county', 'Select a County', choices=c("Choose One" = "", county_list()))
})
tab <- reactive({
df %>%
filter(state == input$state) %>%
filter(county == input$county)
})
output$table <- renderTable({
tab()
})
}
我尝试将县下拉列表中的“selectizeInput”替换为以下“updateSelectizeInput”,但不断收到以下错误
新服务器行
updateSelectizeInput(session, 'county', 'Select a County', choices=c("Choose One" = "", county_list()))
错误:无法将类型“环境”强制转换为“字符”类型的向量
创建数据框的代码 - 县列表还不是正确的列表
x <- getURL("https://raw.githubusercontent.com/nytimes/covid-19-data/master/us-counties.csv")
csv <- read.csv(text=x)
df <- as.data.frame(csv)
state_list <- c(levels(df$state))
county_list <- subset(df, select = c(3,2))
输入输出
dput(head(cl))
structure(list(state = c("Washington", "Washington", "Washington",
"Illinois", "Washington", "California"), county = c("Snohomish",
"Snohomish", "Snohomish", "Cook", "Snohomish", "Orange")), row.names =
c(NA, 6L), class = "data.frame")
【问题讨论】:
-
不要将 selectizeInput 替换为 updateSelectizeInput。将其添加到服务器。 selectizeInput 进行 id =county 的输入,updateSelectizeInput 可以更新 id =county 的输入。
-
getURL 对我不起作用。当我运行 url.exists() 时,它返回“FALSE”。您可以尝试“dput(df)”并将输出复制/粘贴到问题中吗?如本答案所述:stackoverflow.com/a/49995752/11437205
-
完成!我只是使用 head() 提取,因为它是一大组数据我还修复了 URL,它只是在问题中的格式奇怪,如果你愿意,你现在应该可以重用它。
-
谢谢 - 更新的答案。