簡體   English   中英

用於在R中循環下載地圖數據(光柵包)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM