请求优化R语言批量读取合并Shapefile的函数
批量读取合并Shapefile的R函数优化求助
我编写了一个R语言函数用于批量读取、合并Shapefile并保存,现寻求优化方案以解决大文件场景下的内存不足问题。
原函数代码
reading_all_shapes=function(path,state,type_file,name_layer,dir_save){ number_files = length(list.files(path =paste0(path,state), all.files = F, recursive = F, full.names = TRUE))/2 shape_list=list() for(i in 1:number_files){ tryCatch({ shape_list[[i]] = readOGR(dsn = paste0(path,state,'\\unzipped',i),layer=type_file) }, error=function(e){cat("ERROR :",conditionMessage(e), "\n")}) } stacked_layers=do.call(rbind, shape_list) writeOGR(stacked_layers, layer = name_layer, dir_save, driver="ESRI Shapefile") return(stacked_layers) }
参数说明
path:Shapefile存储根路径;state:巴西联邦州(对应Shapefile所在目录);type_file:要读取的Shapefile类型(如农村地产、永久保护区等);name_layer:合并后Shapefile的图层名;dir_save:合并后文件的保存路径。
函数逻辑与当前问题
函数的作用是读取不同文件夹中的多个Shapefile,合并后保存到指定目录。其中number_files = length(list(...))/2是因为目标目录下同时存在Shapefile文件夹和对应的压缩包(例如阿克里州有22个市镇,对应22个文件夹和22个压缩包)。
目前遇到的问题:部分州的市镇数量多、Shapefile文件量大,电脑无法处理全量读取合并的过程。我了解过lapply和sapply函数,但不确定是否适用。我的思路是分块处理:每读取10个文件就合并保存,清理内存后继续处理剩余文件,最后再将所有分块合并的文件整合,但无法实现通用的分块逻辑(不同州的文件数量不同)。
内容的提问来源于stack exchange,提问作者EduMinsky
相关产品推荐
相关产品推荐

