У меня есть 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 .
да я имел в виду это . Спасибо, что он написал результаты из всех файлов для отдельных файлов. Я хочу, чтобы они были написаны в одном текстовом файле с форматом, который я показал в моем вопросе. –