Как я могу настроить вызовы 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» - за ними следует таблица, всплывающая в приложении, а после того, как я изменяю имя таблицы, те же строки повторяются бесконечно.

введите здесь описание изображения


person MeaganLP    schedule 21.03.2018    source источник


Ответы (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 )
  })

СС стола блестящий

person Cristian E. Nuno    schedule 22.03.2018