0

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

> 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 行的区域的数据框。

期待任何提示!谢谢!

4

1 回答 1

0

好的,这主要是用户错误和深夜混乱:

  1. 我实际上并没有使用 FCC Area API(这是一次单独的尝试)。我正在使用call_geolocator_latlon()来自 的函数tigris,我已将 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)
  }
}
于 2020-11-06T18:22:59.897 回答