我有一年(considered as matrix with nrows=500 and ncol=700)
的365个文件,我想计算当年的总体平均值。
阅读一个文件:
con <- file("C:\\Users\\data.img","rb")
dat<- readBin(con, numeric(), size=4, n=700*500, signed=TRUE)
STR(DAT) num [1:810438] 0.5 0.2 0.1 ...
阅读所有文件:
dir1<- list.files("C:\\Users\\datsets", "*.img", full.names = TRUE)
循环文件:
for (.files in seq_along(dir1)){
file1 <- readBin(dir1[.files], numeric(), size = 4, n = 700*500, signed = T)}
请问如何计算所有值的平均值(逐个像素),最后得到一个平均值的文件?
编辑:我忘了提及,我只想计算具有正值的元素(像素)之间的平均值。
答案 0 :(得分:3)
以下是我能想到的两种方法:
1)使用for
循环(内存效率):
sum.dat <- rep(0, 810438)
sum.pos <- rep(0, 810438)
for (.file in dir1) {
dat <- readBin(.file, numeric(), size = 4, n = 700*500, signed = TRUE)
pos <- dat >= 0
sum.dat <- sum.dat + dat * pos
sum.pos <- sum.pos + pos
}
mean.dat <- sum.dat / sum.pos
2)使用vapply
(简洁代码但内存效率不高,因为它会立即将所有数据加载到内存中。如果您计划对所有数据进行进一步处理,这可能是您想要的。)< / p>
dats <- vapply(dir1, readBin, FUN.VALUE = numeric(810438),
what = numeric(), size = 4, n = 700*500, signed = TRUE)
mean.dat <- rowmeans(ifelse(dats >= 0, dats, NA), na.rm = TRUE)