1

我想在 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 代码”开头的前三行是可见的——后面是一个在应用程序中弹出的表格,然后在我更改表格名称后,这些相同的行会无限重复。

在此处输入图像描述

4

1 回答 1

0

概述

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 )
  })

表亮的 SS

于 2018-03-22T01:47:41.793 回答