2015-08-07 3 views
0

Я написал сценарий для геокодирования списка адресов с использованием R и Google Maps, но это превышает 10-кратное ограничение скорости запросов Google в секунду. Я хотел бы замедлить это до 5 запросов в секунду.Можно ли управлять скоростью функции lapply?

Моя функция создает 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.

Спасибо!

+4

Возможно, сработает функция Sys.sleep (0.2)? –

+1

Работает как шарм, спасибо CactusWoman! – Phoebe

ответ

1

Использовать Sys.sleep, чтобы подождать определенное время, затем продолжить. Вы не сможете использовать этот сеанс R для чего-либо еще, но одновременно можете запускать несколько сеансов R, чтобы не мешать вам работать в другом сеансе R.

+0

@CactusWoman предложил Sys.sleep (0.2), я мог бы сделать хотя бы Sys.sleep (0.3), чтобы убедиться, что вы не столкнулись с возможным конфликтом на стороне Google (т. Е. Слишком близко к вызову с их конца). – Madness

+1

Хорошее предложение. Спасибо за помощь! – Phoebe

Смежные вопросы