【问题标题】:For loop in R to download map data (raster package)R中的for循环下载地图数据(光栅包)
【发布时间】:2016-01-19 14:02:08
【问题描述】:

我目前正在尝试使用不同的国家绘制非洲地图并将它们绘制在一起。我使用以下代码下载并绘制了一个国家/地区,效果很好:

CMR <- getData('GADM', country='CMR', level=0)
plot(CMR)

我现在想为非洲的所有不同国家/地区执行此操作。所以我制作了一个包含所有这些 GADM 代码的字符向量 (charafr),现在我想尝试使用 for 循环将它们全部保存到一个单独的向量中。我对如何将这些分配给单独的向量感到有些困惑。这就是我所拥有的:

for (i in 1:53){
     africancountries[i] <- getData('GADM', country=charafr[i], level=0)
}

这不起作用,我不能 100% 确定如何调整格式,以便所有空间多边形数据帧都位于不同的向量中。

有人有想法吗?

提前致谢。

【问题讨论】:

  • 你知道数据在哪里直接下载吗?
  • getData 来自什么包?
  • 很抱歉我应该提供这些信息,getData 函数来自名为 raster 的包,而 GADM 是一个行政边界数据库。
  • 循环前:africancountries&lt;-vector("list",length(charafr))。循环内部:africancountries[[i]] &lt;- getData('GADM', country=charafr[i], level=0)(注意双方括号[[)。
  • 感谢您的回复。我试过运行它,它看起来像它工作,但是此时所有的空间多边形数据帧现在都存储在一个“大列表”中,我想将所有不同的向量作为单独的“大多边形数据帧”。抱歉我的解释不清楚。

标签: r for-loop dataframe


【解决方案1】:

你可以这样做

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')

【讨论】:

    【解决方案2】:

    我没有 charafr 向量,所以我不完全确定这是否会起作用(我使用 2 元素向量进行了测试),但根据您上面的 cmets,它应该可以工作。这将产生一个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 ) }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 2020-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-23
      相关资源
      最近更新 更多