【问题标题】:FCC Census Block API timing outFCC Census Block API 超时
【发布时间】:2020-11-07 02:23:34
【问题描述】:

我需要迭代几千个纬度和经度对。我写了一个 for 循环,它只填写前 20 行然后停止。我在documentation 中找不到任何限制,但我想我可以写一个Sys.sleep 来绕过它。没有骰子,我一定错过了什么。 dput,因为我找不到带有 lat/lon 对的现成数据源。

> dput(fw %>% select(lat,lon, Offense) %>% head(22))
structure(list(lat = c(32.7305737101884, 32.7071796535597, 32.801343650586, 
32.6497235905068, 32.9196968288275, 32.8213635863012, 32.7606031381985, 
32.7090479791265, 32.7353753247409, 32.7785087695848, 32.7606031381985, 
32.7268425544181, 32.7179541491143, 32.7500856566189, 32.7352690680259, 
32.6608938090998, 32.741037616671, 32.7885499640296, 32.6267787210864, 
32.6226562944531, 32.8036718521628, 32.7325453290282), lon = c(-97.3299315325775, 
-97.440786931728, -97.3856410446521, -97.3216047378274, -97.3406980675876, 
-97.4589971745759, -97.22609732855, -97.3480226360202, -97.4690739426462, 
-97.3015112961882, -97.22609732855, -97.3316422324573, -97.439848768221, 
-97.3569699397729, -97.471429159867, -97.4017441039168, -97.265145927386, 
-97.3860506325934, -97.3798330465665, -97.3782646205598, -97.2906413984061, 
-97.3701635007801), Offense = c("90Z", "23G", "220", "290", "220", 
"90J", "90F", "290", "23H", "240", "290", "23C", "220", "90E", 
"13B", "23H", "90Z", "23F", "13B", "23F", "35A", "120")), row.names = c(NA, 
-22L), class = c("tbl_df", "tbl", "data.frame"))

这里是我目前想出的代码:

fw$tract <- NA
for(i in seq_along(fw)){
  fw$tract[i] <- tigris::call_geolocator_latlon(lat = fw$lat[i], lon = fw$lon[i])
  if(i %% 20 == 0) {
    Sys.sleep(1000)
  }
}

期望的结果:包含多于前 20 行的区域的数据框。

期待任何提示! 谢谢!

【问题讨论】:

    标签: r api census tigris


    【解决方案1】:

    好的,这主要是用户错误和深夜困惑:

    1. 我实际上并没有使用 FCC Area API(这是一次单独的尝试)。我正在使用来自tigriscall_geolocator_latlon() 函数,我已将 tigris 标签添加到帖子中。

    2. 在我上面的尝试中,我使用了没有列引用的seq_along,所以i in seq_along(df) 沿着列排序......其中有 20 个!因此停在 20 行。

    这是一些修改后的代码:

    fw$tract <- NA
    for(i in seq_along(fw$tract)){ 
      # could also use seq_len(nrows(fw))
      fw$tract[i] <- tigris::call_geolocator_latlon(lat = fw$lat[i], lon = fw$lon[i])
      if(i %% 1000 == 0) {
        Sys.sleep(500)
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-02
      • 1970-01-01
      • 1970-01-01
      • 2020-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-02
      相关资源
      最近更新 更多