Трябва да взема данни от 1303 растера (всеки растер има данни за 1 месец) и да направя времеви серии за всяка клетка от мрежата в растерите. Накрая ще обединя всички времеви редове в един масивен (зоопарк) файл.
Имам кода, който може да го направи (опитах малка част от набора от данни и работи), но изглежда, че отнема цяла вечност само за подреждане на растера (повече от 2 часа вече и все още се броят) и това не е по-бавна част, която ще прави времевите серии. И така, ето моят код, ако някой знае по-бърз начин за подреждане на растери и/или за създаване на времеви серии (може би без двойния цикъл?), моля, помогнете...
Не знам друг език за програмиране, но това ще бъде ли твърде много, за да искам от R?
files <- list.files(pattern=".asc")
pat <- "^.*pet_([0-9]{1,})_([0-9]{1,}).asc$"
ord_files <- as.Date(gsub(pat, sprintf("%s-%s-01", "\\1", "\\2"), files))
files<-files[order(ord_files)]
#using "raster" package to import data
s<- raster(files[1])
pet<-vector()
for (i in 2:length(files))
{
r<- raster(files[i])
s <- stack(s, r)
}
#creating a data vector
beginning = as.Date("1901-01-01")
full <- seq(beginning, by='1 month', length=length(files))
dat<-as.yearmon(full)
#building the time series
for (lat in 1:360)
for (long in 1:720)
{
pet<-as.vector(s[lat,long])
x <- xts(pet, dat)
write.zoo(x,file=paste("P:/WRSRL/Users1/ncgk/IBERIA/cru_pet/zoo/","lat",lat,"long",long,".csv", sep="") , sep=",")
}
read.table
е още по-лошо! - person sbg   schedule 29.03.2012s = c()
;for(i in 1:10){ s <- c(s, rnorm(100)) }
по-бързо:s = rep(NA, 1000)
;for(i in seq(1,10*100,100)){ s[i:(i+99)] <- rnorm(100) }
(съжалявам, това изглежда грозно като коментар) - person smu   schedule 29.03.2012