首页 > 解决方案 > 使用 R 处理多个光栅文件时保留原始文件名

问题描述

我有以下问题:我需要使用 R package 中的相同函数处理多个光栅文件landscapemetrics。基本上我的栅格文件是国家地图的一部分,形状和大小都相同(即象限。我想出了一个文件的代码,但我必须对 600 多个栅格做同样的事情。所以,手动进行是非常不合理。我的代码中的步骤如下:

# 1. I load "raster" and "landscapemetrics" packages: 
library(raster)
library(landscapemetrics)

# 2. I read in my quadrant: 
Quadrant <- raster("C:\\Users\\customer\\Documents\\ ... \\2434-44.tif")

# 3. I process the raster to get landscape metrics tibble: 
LS_metrics <- calculate_lsm(landscape = Quadrant)

# 4. Finally, I write it into a csv: 
write.csv(LS_metrics, file = "2434-44.csv")

我需要为我的 csv 文件保留与 tif 相同的文件名(例如,处理象限“2434-44.tif”的结果,需要存储在“2434-44.csv”中,可能在 wd 中的文件夹中)。

我是 R 新手。我尝试使用list.files()然后应用 for 循环,但我的代码不起作用。我需要你的建议。你忠实的,丹尼斯

标签: rgisraster

解决方案


您的问题实际上是关于迭代和字符(文件名)操作;与景观测量等无关。本网站和其他地方的资源有许多类似的问题,您可以咨询。基本方法可以是这样的:

# get input filenames
inf <- list.files("/my/path", pattern="\\.tif$", full=TRUE)

# create output filenames
outf <- gsub(".tif", ".csv", basename(inf))

# perhaps put output files in particular folder
dir.create("out", FALSE, FALSE)
outf <- file.path("out", outf)

# iterate 
for (i in 1:length(inf)) {
   # read input 
   input <- raster(inf[i])

   # do something 
   output <- data.frame(id=1)

   # write output
   write.csv(output, outf[i]) 
}

推荐阅读