код предназначен для чтения нескольких дней в определенное время года и сохранения климатических переменных в массиве. выбор дня основан на другом файле, то есть дате посева. код работает, но занимает неожиданно много времени. Я должен запустить этот код 156 раз. Любая помощь для запуска этого кода в короткие сроки приветствуется, пожалуйста.
код приведен ниже с комментариями:
#Defining an array
prec<-array(0,dim=dim(frac)) # dim(frac) = 377 175 30
#Loop over years
for (year in c(2:30)) #first year not included because growing season might have started in year 0 (e.g. in winter crop)
{
print(year+1980)
# Reading input precipitation files
inputprec.file<-paste("E:/Paper_2018/Prec/","prec_",1980+year,".nc",sep="")
inputprec.file.previous<-paste("E:/Paper_2018/Prec/","prec_",1980+year-1,".nc",sep="")
nc<-nc_open(inputprec.file)
lons.inp<-ncvar_get(nc,"longitude")
lats.inp<-ncvar_get(nc,"latitude")
val<-ncvar_get(nc,"pr")
nc_close(nc)
# to select exactly the same doamains for the input from files cftfrac and inputprec.file
xmin<-which(abs(lons.inp-min.lon)<0.01)
xmax<-which(abs(lons.inp-max.lon)<0.01)
ymin<-which(abs(lats.inp-min.lat)<0.01)
ymax<-which(abs(lats.inp-max.lat)<0.01)
val<-val[xmin:xmax,ymin:ymax,]
nc<-nc_open(inputprec.file.previous)
val.previous<-ncvar_get(nc,"pr")
nc_close(nc)
val.previous<-val.previous[xmin:xmax,ymin:ymax,]
# Loopf over length of x and y
for(x in c(1:377))
for (y in c(1:175))
{
if(!is.na(hdate[x,y,year])) #get rid of excess NAs
if(hdate[x,y,year]>0) # condition to check if hdate >0
{
if(hdate[x,y,year]>sdate[x,y,year]) # if hdat>sdate i.e. kharif season run this part of code otherwise go to else condition
{
#condition over 3rd dimention of sdate to slected few days after sowing
counter=sdate[x,y,year]
while (counter <= sdate[x,y,year]+29) {
print(counter)
counter=counter+1
}
prec[x,y,year]<-sum(val[x,y,sdate[x,y,year]:counter])
}else # if hdat< sdate i.e. rabi season run this part of code
{
#condition over 3rd dimention of sdate to slected few days after sowing
counter=sdate[x,y,year-1]
while (counter <= sdate[x,y,year-1]+59) {
print(counter)
counter=counter+1
}
prec[x,y,year]<-sum(val.previous[x,y,sdate[x,y,year-]:counter])
}
}
}
} # end of loop over years