Ошибка преобразования вывода Googleway в Dataframe - PullRequest
1 голос
/ 05 марта 2019

Я с большим успехом использовал код из ответа на предыдущий вопрос .Прошлой ночью, после успешного использования кода много раз я начал получать сообщение об ошибке при попытке выполнить вторую часть кода для доступа к результатам списка.Список lst_elements не создается.Это мой код

# Run Google Distance API ALl Transit
res <- lapply(1:nrow(Lankenau), function(x) {
  google_distance(origins = c(Lankenau[x,"LAT"],Lankenau[x,"LONG"]),
                  destinations = c(Lankenau[x,"O_Lat"],Lankenau[x,"O_Long"]),
                  mode = "transit",arrival_time = time)})

lst_elements <- lapply(res, function(x){
   stats::setNames(
     cbind(
       distance_elements(x)[[1]][['duration']],
       distance_elements(x)[[1]][['distance']]
     )
     , c("duration_text", "duration_value", "distance_text", "distance_value")
   )
 })

и полученная ошибка

Error in names(object) <- nm : attempt to set an attribute on NULL 
3.
stats::setNames(cbind(distance_elements(x)[[1]][["duration"]], 
    distance_elements(x)[[1]][["distance"]]), c("duration_text", 
    "duration_value", "distance_text", "distance_value")) 
2.
FUN(X[[i]], ...) 
1.
lapply(res, function(x) {
    stats::setNames(cbind(distance_elements(x)[[1]][["duration"]], 
        distance_elements(x)[[1]][["distance"]]), c("duration_text", 
        "duration_value", "distance_text", "distance_value")) ... 

любые советы будут отличными!Я не уверен, что случилось.Точно такое же благо все еще работает для другого фрейма данных.Можно ли предположить, что ошибка связана с самим data.frame?

1 Ответ

1 голос
/ 05 марта 2019

Вероятно, это зависит от данных из-за отсутствия или неправильных входных данных для вызова google_distance(), где NULL возвращается в соответствующей позиции в вашем списке res .

Рассмотрим перенос tryCatch, чтобы вернуть однорядный фрейм данных NA для этих проблемных элементов. Если все элементы появляются как однорядные NA, то все прогоны google_distance() не пройдены.

lst_elements <- lapply(res, function(x){
   tryCatch(setNames(cbind(distance_elements(x)[[1]][['duration']],
                           distance_elements(x)[[1]][['distance']]
                     ), c("duration_text", "duration_value", 
                          "distance_text", "distance_value")
                     ),
            error = function(e) 
                        data.frame(duration_text=NA, duration_value=NA, 
                                   distance_text=NA, distance_value=NA)
            )      
})

final_df <- do.call(rbind, lst_elements)
...