我一直在利用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本身?
答案 0 :(得分: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)