R - Хранение для вывода цикла для кодирования обратного гео (Google API) - PullRequest
0 голосов
/ 09 ноября 2019
y <- data.table()
for(i in 1:50){
  latlng <- list("latlng" = paste(myContent$lat[i],myContent$lon[i],sep = " " ),key = "XXXX")
  response <- GET(url, query = latlng)
  Sys.sleep(0.1)
  if(response$status_code == 200){
    apiResponse <- fromJSON(content(response, "text"))
  }
  else{
    print("Error with Request")
  }
data <- rbind(y,apiResponse$results$formatted_address)
}

Мне нужен цикл, чтобы можно было получить 50 адресов от широты и долготы, но используется только последняя комбинация геокодов. Я понимаю, что мне нужно хранить выходные данные каждой итерации цикла, но я не совсем понимаю, как это сделать. Первый раз, задавая вопрос, пожалуйста, будьте милостивы. Спасибо!

1 Ответ

0 голосов
/ 09 ноября 2019

Подумайте о создании списка фреймов данных с Map (оболочкой для mapply), так как вы запускаете поэлементный цикл между векторами. Затем rbind один раз в конце. Вы можете запустить цикл через обобщенную функцию вашего процесса:

get_address <- function(lat, lon) {
   latlng <- list(latlng = paste(lat, lon),
                  key = "XXXX")
   response <- GET(url, query = latlng)
   Sys.sleep(0.1)
   if(response$status_code == 200){
      apiResponse <- fromJSON(content(response, "text"))
   }
   else{
      print("Error with Request")
   }

   return(apiResponse$results$formatted_address)
}

df_list <- Map(get_address, myContent$lat, myContent$lon)

df_list <- Filter(NROW, df_list)    # REMOVE EMPTY DATA FRAMES
df_list <- Filter(length, df_list)  # REMOVE EMPTY NULL ITEMS

final_df <- do.call(rbind, df_list)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...