我一直在利用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本身?
可能它是特定于数据的,因为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)