【问题标题】:How can I adjust tidycensus API calls with shiny app input and visualize the results?如何使用闪亮的应用程序输入调整 tidycensus API 调用并可视化结果?
【发布时间】:2026-02-05 11:20:07
【问题描述】:

我想在 Shiny 中创建一个可视化应用程序,它将根据从 Census API(ACS 1 年)检索到的数据制作图表。为了扩展用户可用的变量选项,我希望根据用户输入调整 API 调用。下面我粘贴了一个基本代码示例,旨在将 tidycensus API 调用的结果打印为闪亮应用程序中的表格。用户应该能够输入新的表名并查看更新的结果,但是当输入新的表名时,数据表不会更新并且 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 代码”开头的前三行是可见的——后面是一个在应用程序中弹出的表格,然后在我更改表格名称后,这些相同的行会无限重复。

【问题讨论】:

    标签: r shiny tidycensus


    【解决方案1】:

    概述

    ACSdata() 是一个反应式表达式,但您当前将get_acs() 的输出存储在一个名为acs 的对象中,而从未将returning 的内容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 )
      })
    

    【讨论】: