【问题标题】:Writing multiple .shps from list with loop in R在R中使用循环从列表中写入多个.shp
【发布时间】:2017-08-11 06:42:26
【问题描述】:

我有一个大约 2000 个 SpatialPolygonDataFrames 的列表 (mylist),我想将这些 .shps 导出到一个文件夹(我的目录)中。我正在尝试使用循环来访问列表,但它似乎不起作用。我该怎么做?

for (i in 1:length(mylist)){
    writeOGR(mfiles,i,"mfiles",i,layer = "mfiles",i, driver="ESRI Shapefile",overwrite_layer = T)
}


Error: is.logical(verbose) is not TRUE

谢谢。

【问题讨论】:

    标签: r list for-loop export


    【解决方案1】:

    这是一个包含空间点数据框列表的示例,同样适用于您的空间多边形数据框列表

    首先加载sp和rgdal:

    library(sp)
    library(rgdal)
    

    然后创建两个虚拟的 SpatialPointsDataFrame:

    coords <- cbind(c(1, 2, 3), c(1, 2, 3))
    data <- data.frame(name = c("foo", "bar", "blah"))
    ob1 = SpatialPointsDataFrame(coords, data)
    coords <- cbind(c(4, 5, 6), c(4, 5, 6))
    data <- data.frame(name = c("cookie", "cheese", "apple"))
    ob2 = SpatialPointsDataFrame(coords, data)
    

    然后将这两个放在一个列表中:

    mfiles <- list(ob1, ob2)
    str(mfiles)
    

    现在您可以使用您提供的几乎相同的代码:

    for (i in 1:length(mfiles)){
        writeOGR(mfiles[[i]],
                 paste0("mfiles", i, ".shp"),
                 layer = "mfiles",
                 driver="ESRI Shapefile",
                 overwrite_layer = T)
    }
    list.files()
    

    您将列表本身提交给 writeOGR 函数,您应该在循环中使用双方括号对列表进行索引:[[i]]

    【讨论】:

    • 感谢@trosendal 关于索引的通知。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-19
    相关资源
    最近更新 更多