我在文件夹中有大约40个.tiff格式的空间栅格。我试图从R中的每个栅格生成直方图,并将每个直方图保存为一个单独的文件夹中的jpeg。我编写代码来遍历每个栅格,创建直方图并使用' jpeg'封装
setwd("G:/Research/MODIS Albedo Oct 08-July 09/Test")
library(raster)
library(jpeg)
files <- list.files(path="G:/Research/MODIS Albedo Oct 08-July 09/Test", pattern=".tif",all.files=T, full.names=F, no.. = T) #generate a list of rasters in the folder
number<-length(files) #count the number of rasters
for(r in 1:number) #loop over each raster in the folder
{
x<-raster(files[r], header=F) #load one raster file
jpeg("G:/Research/MODIS Albedo Oct 08-July 09/test_histplots/r.jpg") #create jpeg using the name 'r' generated by loop
hist(x) #generate histogram
dev.off()
}
我希望每个生成的jpeg都有一个不同的名称,理想情况下是原始栅格名称的子集。例如,如果栅格的原始名称是&#39; MODIS101_265&#39;,则jpeg的名称应为265.这里,265是该年份的Julian日期。我假设这可能涉及在C中使用%d之类的格式说明符,但我不确定它在R中是如何工作的。
当我运行上面的代码时,我只得到一个直方图。似乎代码正确地循环遍历原始栅格,但将所有结果直方图保存为单个jpeg。
任何建议都会有所帮助!谢谢!
答案 0 :(得分:1)
使用gsub
的正则表达式是您从名称中获取号码的朋友。假设您的所有文件都以您的示例命名(“MODIS101_265.tif”),那么下面的代码将适合您。
此外,欢迎来到R for
循环缓慢,通常可以用更快的lapply
替换。
saveMyHist <- function(fileName) {
fileNum <- as.numeric(gsub(".*_(\\d+)\\.tif", "\\1", fileName))
x <- raster(fileName, header=F)
jpeg(sprintf("G:/Research/MODIS Albedo Oct 08-July 09/test_histplots/%03d.jpg",
fileNum))
hist(x)
dev.off()
}
files <- list.files("/Users/home/Documents/Development/Rtesting",
pattern=".tif",all.files=T, full.names=F, no.. = T)
lapply(files, saveMyHist)