Как я могу настроить вызовы API Tidycensus с помощью блестящего ввода приложения и визуализировать результаты?
Я хочу создать приложение визуализации в Shiny, которое будет создавать графики на основе данных, полученных из Census API (ACS 1 год). Чтобы расширить параметры переменных, доступные пользователям, я хочу, чтобы вызов API корректировался на основе пользовательского ввода. Ниже я вставил базовый пример кода, предназначенный для печати результатов вызова API tidycensus в виде таблицы в блестящем приложении. Пользователь должен иметь возможность ввести новое имя таблицы и увидеть обновленные результаты, однако при вводе нового имени таблицы таблица данных не обновляется, и вызов API, по-видимому, выполняется непрерывно. Это даже при том, что значение по умолчанию, предоставленное вызову API, работает как ожидалось.
Обратите внимание, что для вызова данных API переписи требуется заметные секунды.
library(tidycensus); library(shiny)
# assumption that a census api key is already installed on your system
ui <- fluidPage(
textInput("table.name",
label = "Enter table name here:",
value = "B08006"),
tableOutput("acs")
)
server <- function(input, output) {
ACSdata <- reactive({
acs <- as.data.frame(get_acs(geography = "place",
table = as.character(input$table.name),
survey = "acs1",
year = 2016,
state = "PA"))
})
output$acs <- renderTable({
ACSdata()
})
}
shinyApp(ui, server)
Новое имя таблицы, чтобы попробовать: B05013
Ниже приведена картинка с консолью результатов. Первые три строки, которые начинаются с "использования кода FIPS", видны - за ними следует всплывающая таблица в приложении, затем после того, как я изменю имя таблицы, эти же строки повторяются бесконечно.
1 ответ
обзор
ACSdata()
является реактивным выражением, но вы в настоящее время храните вывод get_acs()
внутри объекта под названием acs
никогда не возвращая содержание acs
к глобальной окружающей среде. Как только это изменится, вы увидите обновление таблицы.
ACSdata <- reactive({
acs <- as.data.frame(get_acs(geography = "place",
table = as.character(input$table.name),
survey = "acs1",
year = 2016,
state = "PA"))
# return the contents of `acs` to the Global Environment
return( acs )
})