我正在尝试获得多个国家/地区的最低管理界限。 到目前为止,我可以毫无问题地在国家/地区级别下载数据。
world <- c("IOT", "BEN", "TGO")
ac <- list()
for ( i in 1:lenght(world)){
ac[[i]] <- getData("GADM", country=world[i], level=0)
}
world_boundaries <- do.call("bind",ac)
问题没有一个国家/地区具有相同的管理边界级别,因此每次我尝试将级别更改为较低级别时,都会收到一个错误消息:无法打开URL。我当时正在考虑创建一个循环,尝试每个管理级别,但我无法弄清楚。
ac <- list()
levl <- C("0", "1", "2", "3", "4", "5")
for ( i in 1:lenght(world)){
ac[[i]] <- getData("GADM", country=world[i], level=levl)
}
world_boundaries <- do.call("bind",ac)
所以我有点卡住了,我不知道如何解决这个问题。 谢谢
答案 0 :(得分:0)
以下是使用tryCatch的建议方法。我认为可以稍微整理一下该解决方案,但这是一个起点。基本上,对于每个国家/地区,开始尝试以最高管理员级别下载边界。如果有警告或错误,请跳到下一个级别。如果成功,则tryCatch将结束,标志仍设置为TRUE,然后下一个国家/地区开始。
library(raster)
world <- c("ITO", "BEN", "TGO")
ac <- list()
levl <- c(0:5)
for ( i in 1:length(world)){
j <- length(levl)
while (j >= 0) {
FLAG <- TRUE
ac[[i]] <- tryCatch(getData("GADM", country=world[i], level=levl[j]),
warning = function(w) {j <<- j-1
FLAG <<- FALSE},
error = function(e) {j <<- j-1
FLAG <<- FALSE})
if (!FLAG) next
if (FLAG) break
}
}
world_boundaries <- do.call("bind",ac)