如何在R中对指定文件夹内的全部栅格数据执行批量运算操作?
R语言批量栅格缩放存储实现方案
我们使用terra包完成操作,它相比旧版raster包运算速度更快、内存占用更低,适配绝大多数栅格处理场景。
# 1. 安装加载包(如果已经安装可跳过install.packages行) install.packages("terra") library(terra) # 2. 定义路径参数,替换为你自己的实际路径 input_dir <- "./folder1" # 输入栅格所在文件夹 output_dir <- "./folder2" # 输出目标文件夹 # 自动创建输出文件夹(如果不存在) if (!dir.exists(output_dir)) { dir.create(output_dir, recursive = TRUE) } # 3. 获取输入文件夹下所有tif格式文件列表 tif_files <- list.files( path = input_dir, pattern = "\\.tif$", # 匹配所有后缀为tif的文件,忽略大小写的话可以加ignore.case = TRUE full.names = TRUE # 返回文件完整路径 ) # 4. 循环处理每个栅格文件 for (tif_path in tif_files) { # 读取单个栅格 r <- rast(tif_path) # 乘以0.0001系数 r_scaled <- r * 0.0001 # 生成输出文件路径,保持原文件名 output_path <- file.path(output_dir, basename(tif_path)) # 写入tif文件,可选添加LZW压缩减小文件体积 writeRaster( r_scaled, output_path, overwrite = TRUE, # 若输出文件已存在则覆盖,不需要可以删掉 wopt = list(compress = "LZW") ) }
注意事项
- 若你的栅格文件后缀是
tiff而非tif,可以把pattern参数修改为\\.tif(f)?$即可同时匹配两种后缀 - 如果需要保留原文件的无数据(NA)属性、元数据信息,
terra的writeRaster会默认保留,不需要额外配置 - 若处理超大体积栅格时遇到卡顿,可以给
rast函数添加memfrac = 0.6参数,分配更多运行内存给栅格处理进程
内容的提问来源于stack exchange,提问作者Salvatore Praticò
相关产品推荐
相关产品推荐

