将Googleway输出转换为Dataframe时出错

问题描述 投票:1回答:1

我一直在利用a previous question的答案取得巨大成功。昨晚,在成功使用代码多次后,我开始尝试执行代码的第二部分来访问列表结果时收到错误。未创建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本身?

r lapply google-distancematrix-api
1个回答
1
投票

可能它是特定于数据的,因为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)
© www.soinside.com 2019 - 2024. All rights reserved.