【问题标题】:Apply a function over many shapefiles对多个 shapefile 应用函数
【发布时间】:2012-10-25 16:46:45
【问题描述】:

我想在我拥有的 shapefile 列表中应用一个函数,无论是我编写的函数,还是来自 rgeos 包中的 gArea 函数(例如 gArea('shapefile'))等包中的一个函数进口的。

我这样导入文件:

data <- list.files (getwd() , pattern="shp") 

一旦我尝试使用as.listas.data.frame 等合并文件,我就尝试过使用诸如lapply 等函数的方法,但没有成功。应用于单个导入的 shapefile 的函数可以正常工作,但显然对严重的吞吐量没有好处。

想法?

【问题讨论】:

    标签: r gis plyr shapefile


    【解决方案1】:

    你可以试试这样的:

    library(maptools)
    library(rgeos)
    sapply(lapply(list.files(pattern="*.shp"), readShapePoly), gArea)
    

    【讨论】:

    • 是否有线程处理如何将 shapefile 的名称引入列表?
    • 你可以这样做:cbind(list.files(pattern="*.shp"), sapply(lapply(list.files(pattern="*.shp"), readShapePoly), gArea))
    【解决方案2】:

    在@jmsigner 的回答中,我会使用 plyr 包中的ldply

    require(rgeos)
    require(plyr)
    
    shp_paths = list.files(pattern = "shp")
    shp_files = llply(shp_paths, readShapePoly)
    areas = ldply(shp_files, gArea)
    

    我相信ldply 还会在生成的areas data.frame 中包含 shapefile 名称。此外,plyr 函数包括一个内置的进度条(参见.progress),并且可以轻松并行化。

    【讨论】:

      猜你喜欢
      • 2015-09-07
      • 1970-01-01
      • 2020-06-13
      • 1970-01-01
      • 2014-10-26
      • 2017-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多