【问题标题】:Is it possible to control the speed of the lapply function?是否可以控制 lapply 功能的速度?
【发布时间】:2015-08-07 18:52:20
【问题描述】:

我编写了一个脚本来使用 R 和 Google 地图对地址列表进行地理编码,但它超过了 Google 每秒 10 次查询的速度限制。我想把这个速度减慢到每秒 5 个查询。

我的函数构造 URL,然后我使用 do.call、rbind 和 lapply 调用函数来创建我的地理编码数据集。

geoc <- function(address){
    out <- tryCatch({
      url <- "http://maps.google.com/maps/api/geocode/json"
      response <- GET(url,query=list(sensor="FALSE",address1=address))
      json <- fromJSON(content(response,type="text"))
      loc <- json$results[[1]]$geometry$location
      return(c(address1=address, long=loc$lng, lat=loc$lat))
      })
    return(out)
    } 

result <- do.call(rbind,lapply(as.character(sample$location),geoc))

有没有办法把这个速度减慢到每秒大约 5 个查询?如果我一次只对 5 或 10 个进行地理编码,它会很好用,但那里的任何东西都会引发 Google 错误。

谢谢!

【问题讨论】:

  • 也许将 Sys.sleep(0.2) 添加到您的函数中会起作用?
  • 像魅力一样工作,谢谢 CactusWoman!

标签: r google-maps


【解决方案1】:

使用Sys.sleep 等待给定时间,然后继续。您将无法将该 R 会话用于其他任何事情,但您可以同时运行多个 R 会话,这样不会妨碍您在另一个 R 会话中工作。

【讨论】:

  • @CactusWoman 建议使用 Sys.sleep(0.2),我可能至少会做 Sys.sleep(0.3) 以确保您不会在 google 方面遇到可能的冲突(即距离太近而无法调用他们的结局)。
  • 好建议。感谢您的帮助!
猜你喜欢
  • 2011-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-15
  • 1970-01-01
  • 2019-06-17
相关资源
最近更新 更多