【问题标题】:Error Converting Googleway outport to Dataframe将 Googleway 输出转换为数据框时出错
【发布时间】:2019-03-05 14:18:51
【问题描述】:

我一直在使用来自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】:

    它可能是特定于数据的,因为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)
    

    【讨论】:

    • 类似地,它可能是谷歌无法找到位置的地方,因此无法找到距离。我想你也可以检查res$status == "OK"
    • 仍在排除故障。我知道“res”具有预期的列表数量。我知道至少有一些列表是成功的并且有价值。我需要找到一种方法从“res”中的大约 1200 个列表中分离出“null”
    猜你喜欢
    • 2018-08-02
    • 2019-02-17
    • 2018-09-01
    • 2018-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多