У меня есть несколько каталогов с 700 + бинарными закодированными растрами, которые я беру в среднем на выходные растры в каталоге. однако в настоящее время я создаю растры 1 на 1 в цикле for, а затем загружаю вновь созданные растры обратно в R, чтобы взять сумму, чтобы получить общее количество осадков в месяц.Как добавить средние растры в пределах цикла, который создает растры? R
Однако, поскольку мне не нужны отдельные растры, только средний растровый, у меня есть догадка, что я мог бы сделать это все в 1 петле, а не сохранить растры, а только выходного среднего растра, но я иду короткий в том, как программировать это в R.
setwd("~/Desktop/CMORPH/Levant-Clip/200001")
dir.output <- '~/Desktop/CMORPH/Levant-Clip/200001' ### change as needed to give output location
path <- list.files("~/Desktop/CMORPH/MonthlyCMORPH/200001",pattern="*.bz2", full.names=T, recursive=T)
for (i in 1:length(path)) {
files = bzfile(path[i], "rb")
data <- readBin(files,what="double",endian = "little", n = 4948*1649, size=4) #Mode of the vector to be read
data[data == -999] <- NA #covert missing data from -999(CMORPH notation) to NAs
y<-matrix((data=data), ncol=1649, nrow=4948)
r <- raster(y)
e <- extent(-180, 180, -90, 83.6236) ### choose the extent based on the netcdf file info
tr <- t(r) #transpose
re <- setExtent(tr,extent(e)) ### set the extent to the raster
ry <- flip(re, direction = 'y')
projection(ry) <- "+proj=longlat +datum=WGS84 +ellps=WGS84"
C_Lev <- crop(ry, Levant) ### Clip to Levant
M_C_Lev<-mask(C_Lev, Levant)
writeRaster(M_C_Lev, paste(dir.output, basename(path[i]), sep = ''), format = 'GTiff', overwrite = T) ###the basename allows the file to be named the same as the original
}
#
raspath <- list.files ('~/Desktop/CMORPH/Levant-Clip/200001',pattern="*.tif", full.names=T, recursive=T)
rasstk <- stack(raspath)
sum200001<-sum(rasstk)
writeRaster(avg200001, paste(dir.output, basename(path[i]), sep = ''), format = 'GTiff', overwrite = T) ###the basename allows the file to be named the same as the original
в настоящее время этот код занимает около 75 минут, чтобы выполнить, и у меня есть около 120 больше каталогов, чтобы идти, и я ищу для более быстрых решений.
спасибо за все и любые комментарии и ввод. лучше, Evan
Мне кажется, что написание растров не должно быть reallt необходимо, поскольку стек принимает также список растровых объектов на входе. Таким образом, вы можете просто заменить writeraster последовательным назначением M_C_lev элементам списка. Однако это может быть голодны. Alsi, если вы уверены, что все растеты имеют такую же протяженность, подумайте об использовании «быстрого» оптика в стеке. – lbusett
Кроме того, мне кажется, что «кирпич» может быть быстрее, чем «стек» – lbusett