[英]For loop in R to download map data (raster package)
我目前正在嘗試使用不同的國家繪制非洲地圖並將它們繪制在一起。 我使用以下代碼下載並繪制一個國家,這完美地運作:
CMR <- getData('GADM', country='CMR', level=0)
plot(CMR)
我現在想為非洲所有不同的國家做這件事。 所以我創建了一個包含所有這些GADM代碼的charactervector(charafr),現在我想嘗試使用for循環將它們全部保存到單獨的向量中。 我對如何將它們分配給單獨的向量感到困惑。 這就是我所擁有的:
for (i in 1:53){
africancountries[i] <- getData('GADM', country=charafr[i], level=0)
}
這不起作用,我不是100%肯定如何調整格式,所以所有spatialpolygondataframes將在不同的向量。
有人有想法嗎?
提前致謝。
你可以這樣做
library(raster)
charafr <- c('RWA', 'BDI', 'UGA')
使用for循環:
ac <- list()
for (i in 1:length(charafr)){
ac[[i]] <- getData('GADM', country=charafr[i], level=0)
}
allac <- do.call("bind", ac)
plot(allac)
或者,用lapply
,更簡潔,但不太可讀:
charafr <- c('RWA', 'BDI', 'UGA')
allac2 <- do.call("bind", lapply(charafr, function(x) getData('GADM', country=x, level=0)))
要將其作為shapefile保存到磁盤,您可以這樣做
shapefile(allac2, 'allac.shp')
我沒有charafr矢量,所以我不完全確定這是否會起作用(我用2元素矢量測試),但根據你上面的評論,它應該工作。 這將產生一個SpatialPolygonsDataFrame
,如果你想要一個shapefile,它可以使用writeOGR
寫出來。 請注意,這將與列表的工作方式相同,因為如果您需要特定國家/地區,則需要使用列表語法調用它。 但是,它確實有spdf類。
uid <- 1
for ( i in 1:53 ) {
africancountry <- getData( 'GADM', country=charafr[i], level=0 )
n <- length( slot( africancountry, "polygons" ) )
africancountry <- spChFIDs( obj = africancountry, x= as.character( uid:( uid+n-1 ) ) )
uid <- uid + n
if(i == 1){ africancountries <- africancountry } else { africancountries <- rbind( africancountries,africancountry ) }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.