2014-07-08 81 views
0

我在一個文件夾中有大約40個.tiff格式的空間柵格。我試圖從R中的每個柵格生成直方圖,並將每個直方圖保存爲一個jpeg在一個單獨的文件夾中。我寫了代碼循環遍歷每個柵格,創建一個直方圖並使用'jpeg'包保存它。如何從R中的柵格數據保存多個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具有不同的名稱,理想情況下是原始柵格名稱的子集。例如,如果光柵的原始名稱是'MODIS101_265',那麼jpeg的名稱應該是265.這裏,265是該年的Julian日期。我假設這可能涉及使用格式說明符像%d在C中,但我不知道這是如何工作在R.

當我運行上面的代碼,我只得到一個直方圖。看起來代碼正在循環遍歷原始柵格,但將所有結果直方圖保存爲單個jpeg。

任何意見將有所幫助!謝謝!

+0

在'jpeg'調用中生成文件名時使用'sprintf'或'paste'。即'jpeg(sprintf(「G:/ Research/MODIS Albedo Oct 08-July 09/test_histplots/r%04d.jpg」,r))' – hrbrmstr

+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) 
相關問題