
Boa tarde colegas programadores! Estou tendo dificuldades em acertar o formato que devo organizar os outputs de um looping que fiz. Tenho um banco de dados com datas e algumas variáveis climáticas. Dessas datas, preciso simular alguns cálculos para dias específicos. São 36 simulações por ano, durante um período de 34 anos, totalizando 1224 simulações. Para alcançar esse objetivo estou trabalhando com 3 comandos for, um dentro do outro. O primeiro seleciona as datas/posições que devem ser feitos os cálculos. O segundo executa os devidos cálculos para as datas selecionadas e o ultimo integra os valores calculados, gerando a informação de interesse. Acredito que a logica de cálculos dentro de cada for() está ok, mas a saída não está puxando os valores que o looping calcula. Segue o script no corpo do email e, em anexo, um exemplo de um ano do banco de dados que está sendo utilizado. Desde já, agradeço a colaboração dos colegas. Abs #--------------------Remover objetos salvos na memória do R--------------------# rm(list = ls()) #--------------------Seleção de diretorios e arquivos de interesse--------------------# a = read.table("x.txt", sep = "\t", header = T) #--------------------Calculo das Variaves Astronomicas--------------------# head(a) a$DATE = as.Date(levels(a$DATE))[a$DATE] ano = format(a$DATE, trim = T, '%Y'); a$ano=ano mes = format(a$DATE, trim = T, '%m') ; a$mes=mes dia = format(a$DATE, trim = T, '%d') ; a$dia=dia dece = ifelse(dia<11, 1,ifelse(dia<21,2,3)); a$decendio=dece lat = -7.53 corr = pi/180 decl = 23.45*sin(corr*((a$DiaJuliano-80)*360/365)); decl hn = 1/corr*acos(-tan(corr*lat)*tan(corr*decl)) a$N = 2*hn/15 s = (1+0.033*cos(a$DiaJuliano*360/365)) t = corr*hn*sin(corr*lat)*sin(corr*decl) u = cos(corr*lat)*cos(corr*decl)*sin(corr*hn) a$Qo = 37.6*s*(t+u) head(a) x = 0.25 b = 0.50 n.est = (a$SRAD/a$Qo-x)*a$N/b; n.est a$n<- ifelse((n.est)<0,1, n.est); head(a) a$n.N = a$n/a$N; head(a) #--------------------Transformar MJ em caloria--------------------# a$Srad.cal = round((a$SRAD*1000000)/41800,1); head(a) #round é para delimitar o numero de casas apos a virgula a$sem = paste0(dia, '-', mes) a$TMED = (((a$TMAX+a$TMIN))/2) head(a) #-------------------- Determinacao das datas de simulacao--------------------# ndc = 140 datas = 1:366 # referentes aos dia juliano dim(a) anos = table(a$ano); anos potencial = matrix(NA, nrow = 366, ncol = 34 ) rownames(potencial) = 1:366 colnames(potencial) = c(1980:2013) head(potencial); dim(potencial) head(a) for (i in (a$DiaJuliano)){ epocas = a[which( a$sem == '01-01'|a$sem == '11-01' |a$sem =='21-01'| a$sem == '01-02'|a$sem == '11-02' |a$sem =='21-02'| a$sem == '01-03'|a$sem == '11-03' |a$sem =='21-03'| a$sem == '01-04'|a$sem == '11-04' |a$sem =='21-04'| a$sem == '01-05'|a$sem == '11-05' |a$sem =='21-05'| a$sem == '01-06'|a$sem == '11-06' |a$sem =='21-06'| a$sem == '01-07'|a$sem == '11-07' |a$sem =='21-07'| a$sem == '01-08'|a$sem == '11-08' |a$sem =='21-08'| a$sem == '01-09'|a$sem == '11-09' |a$sem =='21-09'| a$sem == '01-10'|a$sem == '11-10' |a$sem =='21-10'| a$sem == '01-11'|a$sem == '11-11' |a$sem =='21-11'| a$sem == '01-12'|a$sem == '11-12' |a$sem =='21-12'& a$ano>=1980),] semear = length(epocas[,1]) for (j in length(semear)){ ini = as.numeric(rownames(epocas[j])) fim = (ini+ndc)-1 pac = a[(ini:fim),] #--------------------Inserindo as Produtividades Parciais--------------------# #----------Inserindo influencia da nebulosidade----------# pac$ctc[j] = -4.16+(0.4325*pac$TMED[j])-(0.00725*((a$TMED[j])^2)) pac$ctn[j] = -1.064+(0.173*a$TMED[j])-(0.0029*((a$TMED[j])^2)) pac$PPBc[j] = (107.2+(0.36*pac$Qo[j]*1000000)/41800)*pac$ctc[j]*pac$n.N[j] pac$PPBn[j] = (31.7+(0.219*pac$Qo[j]*1000000)/41800)*pac$ctn[j]*(1-(pac$n.N[j])) pac$PPB[j] = round((pac$PPBc[j])+(pac$PPBn[j]),1); head(pac) #--------------------Calculo da Produtividade - base seca --------------------# pac$c.resp[j] = ifelse(a$TMED[j] < 20, 0.6, 0.5) pac$c.colheita[j] = 0.5 umidade = 13 c.um = (1/(1-0.01*umidade)) pac$iaf[j] = 5 pac$c.iaf[j] = (0.0093+0.185*pac$iaf[j])-(0.0175*pac$iaf[j]^2) pac$PP.Liquida_seca = NA pac$PP.Liquida_seca[1] = round(pac$PPB[1]*pac$c.resp[1]*pac$c.colheita[1]*pac$c.iaf[1],1); head(pac) # em kg/ha for (w in 2:ndc){ pac$PP.Liquida_seca[w] = round(pac$PPB[w]*pac$c.resp[w]*pac$c.colheita[w]*pac$c.iaf[w]+ pac$PP.Liquida_seca[w-1],1) } #--------------------Soma da PP--------------------# pac$PP_final = round(pac$PP.Liquida_seca[w]*c.um,1) dim(pac) PP = pac[ndc,32] potencial[i,j] = PP } print(i) } View(pac) View(potencial) Yury Duarte Engenheiro Agrônomo - ESALQ/USP
participantes (1)
-
Yury Duarte