【问题标题】:Read shapefiles from many folders从多个文件夹中读取 shapefile
【发布时间】:2021-11-26 03:27:35
【问题描述】:

我的 shapefile 分布在许多文件夹中,我想将它们拉出并运行一个脚本以相同的方式处理每个文件夹。所有 .shp 文件都具有相同的名称,我需要将文件夹名称作为 id 出现(尚未尝试该部分)。我被困在第一步,但我觉得我很接近了。

# Read folder names to get list of folders

    folders <- list.dirs(path = "./locs", full.names = TRUE, recursive = TRUE)

# Make function that reads inside a folder same way for all files
  
    all_files <- function(folder) {
    readOGR(dsn = folder, layer = "SAMENAME.shp", verbose = FALSE)
}

# Map the function to each folder listed in "folders".

    try <- map(folders, all_files)

很抱歉,我对此没有一个代表,如果我能在这里获得一些牵引力,也许我明天可以建造一个。

【问题讨论】:

    标签: r purrr rgdal


    【解决方案1】:

    我认为你很接近。我认为你只需要三个修复1)使用paste0()函数在“dsn”参数中组合文件夹名称和shapefile名称,2)在你的all_files()函数中添加一个return()调用和3)从map()do.call()lapply()。尝试像这样调整您的代码:

    # Read folder names to get list of folders
    
        folders <- list.dirs(path = "./locs", full.names = TRUE, recursive = TRUE)
    
    # Make function that reads inside a folder same way for all files
      
        all_files <- function(folder) {
        out<-readOGR(dsn = paste0(folder, "SAMENAME.shp", sep+"/), layer = "SAMENAME.shp", verbose = FALSE)
        return(out)
    }
    
    # Map the function to each folder listed in "folders".
    
        try <- lapply(folders, all_files) #lapply() approach
        try2 <- do.call(all_files, folders) #do.call() approach
    

    如果这不起作用,您可以考虑使用 sf::read_st() 函数读取 shapefile

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多