2013-03-11 2 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 

и так далее ...

я нашел что-то очень похожее на StackOverflow: Как рассчитать средние значения переменной в одном двоичном файле на основе классов в другом двоичном файл?

Однако это отличается тем, что у меня есть 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} 

кажется, что он работал без ошибок .: для записи результатов (от Kith ответа):

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

я получить 4 текстовые файлы data1, 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

да я имел в виду это . Спасибо, что он написал результаты из всех файлов для отдельных файлов. Я хочу, чтобы они были написаны в одном текстовом файле с форматом, который я показал в моем вопросе. –

Смежные вопросы