如何计算R中几个文件的总体平均值?

时间:2014-12-31 10:36:48

标签: r

我有一年(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)}

请问如何计算所有值的平均值(逐个像素),最后得到一个平均值的文件?

编辑:我忘了提及,我只想计算具有正值的元素(像素)之间的平均值。

1 个答案:

答案 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)