2013-03-11 44 views
0

我有5個相同尺寸的二進制文件(柵格):前四個文件代表參數1,第五個文件代表10個類的土地覆蓋圖。我想根據土地覆蓋率計算所有四個文件的平均值類。所以最後我們會得到4個對應於每個類的值。如何根據另一個二進制文件中的類來計算幾個二進制文件中變量的平均值?

類似:

1(first class): 
    first file = 0.5(average of all pixels correspond to class 1 from the land cover) 
    second file = 0.4(average of all pixels correspond to class 1 from the land cover) 
    third file = 0.2(average of all pixels correspond to class 1 from the land cover) 
    fourth file = 0.1(average of all pixels correspond to class 1 from the land cover) 

    2(second class): 
first file = 0.5(average of all pixels correspond to class 2 from the land cover) 
second file = 0.4(average of all pixels correspond to class 2 from the land cover) 
third file = 0.2(average of all pixels correspond to class 2 from the land cover) 
fourth file = 0.1(average of all pixels correspond to class 2 from the land cover 

等等...

我發現在計算器非常相似的東西:如何基於另一個二進制類計算變量的平均值在一個二進制文件文件?

但是,這是不同的方式,我有4個文件,而不是一個文件。所以我需要通過我的所有文件循環該代碼。

所有文件:

1-讀取一個文件:

fre <- file("C:\\corr.bin","rb") 
    sdf<- readBin(fre, numeric(), size=4, n=1440*720, signed=TRUE) 

2-讀取土地覆蓋文件:

 land <- file("C:\\land cover.bin","rb") 
     over<- readBin(land, integer(), size=1, n=1440*720, signed=F) 

3-計算僅使用一種平均文件:

result=tapply(sdf, over, mean, na.rm=TRUE) 

我想這對所有文件:

dir1<- list.files("C:\filesh", "*.img", full.names = TRUE) 
    fre <- file("C:\\landover_from Suj1440a.bin","rb") 
    sdf<- readBin(fre, integer(), size=1, n=1440*720, signed=F) 
    results<- list() 
for (.files in seq_along(dir1)){ 
    list1 <- readBin(dir1[.files], numeric(), size = 4, n = 1440*720, signed = TRUE) 
    list1=tapply(list1, sdf, mean, na.rm=TRUE) 
    results[[length(results) + 1L]]<- list1} 

看來,它的工作沒有錯誤: 寫(從骨肉回答)結果:

for (i in seq_along(results)){ 
    write.table(results[[i]], paste("C:\\filesh\\data", i, ".txt", sep="")) 

我會得到4文本文件數據1, data2,data3,......

4-我感謝任何幫助如何將所有結果寫入一個文本文件。我想輸出是具有所有結果一個文本文件:

class   1 2 3 4 5 6 7 ... 
data1   0.2 0.5 0.2 . . . . ... 
data2   0.1 0.5 0.6 
data3   . . . . . . . ... 
data4   . 

回答

1

要保存你寫的文件:

for (i in seq_along(results)){ 
    write.table(results[[i]], "C:\\filesh\\data%03d.txt", sep="\t") 
} 

你的意思是:

for (i in seq_along(results)){ 
    write.table(results[[i]], paste("C:\\filesh\\data", i, ".txt", sep="")) 
+0

是我的意思是這。感謝它寫出了所有文件的結果來分離文件。我希望它們以我在問題中顯示的格式寫入到一個文本文件中。 – 2013-03-11 16:12:23

相關問題