
Obrigado por postar um exemplo 100% reprodutível junto da pergunta (incluindo os dados). Pelo que entendi, a lógica das condições está certa. O problema, contudo, parece ser que certas variáveis parece nunca serem calculadas. Vamos seguir a lógica do programa usando o primeiro valor de i, que é igual a 2. Primeiro, o R vai avaliar se P.ETP é menor do que zero. Essa condição NÃO é verdadeira, pois ele vale 8.99, portanto o R pula o "core" desse if e vai para o else. O else implica que P.ETP é maior ou igual a zero, o que é verdade para a segunda linha dos dados (lembre-se do 8.99). Sendo assim, o R entra no "core" do else. Aí começa o problema: a$ARMf[i] = ifelse(a$ARMi[i] > cad, cad, a$ARMi[i-1]) No código acima, você está pedindo para o R comparar o valor de ARMi com o valor de cad, mas o problema é que ARMi nessa linha é um NA, e portanto essa comparação sempre resulta em NA. Sendo assim, ARMf não será calculado e nem ARMi e NAc, que dependem de ARMf. Talvez você quisesse comparar o ARMi da linha anterior? Agora vamos avançar para a linha 5 dos dados, onde E.ETP é negativo e portanto o R entra no core da primeira condição. Veja a segunda linha da primeira condição: a$ARMi[i] = (cad*exp(-1*((abs(a$NAc[i]))/cad))) No código acima, você pede para o R determinar o valor de ARMi usando o valor de NAc (que é sempre NA porque nunca foi calculado - veja o erro da primeira condição). Portanto, a resposta da exponencial também será NA. Talvez você quisesse pegar NAc da linha anterior (i-1)? A lógica do programa está certa, mas ele sempre calcula variáveis a partir de outras variáveis que são NA por razões diversas. Greetings, -- Thiago V. dos Santos PhD student Land and Atmospheric Science University of Minnesota On Wednesday, May 18, 2016 1:43 PM, Yury Duarte <yurynepomuceno@gmail.com> wrote: Boa tarde colegas programadores, como vão? Estou tendo alguma dificuldade em acertar o script para executar o calculo do balanço hídrico de Thornthwaite & Mather, mas para uma escala diária. Tenho essas condições que deve ser obedecida para execução dos cálculos: * Se P - ETP < 0: NAc = (P - ETP) + NAc[i-1] ARM = CAD * exp(NAc/CAD) * Se P - ETP >= 0:ARM = (P - ETP) + ARM[i-1] NAc = CAD * Ln(ARM/CAD) * ARM <= CAD Utilizei o comando for e o if else para estabelecer as condições e calcular cada variável para cada dia do período analisado. Entretanto, o script não está calculando as variáveis e retorna os vetores vazios. Segue o script no corpo do email e os dados de entrada em anexo. Agradeço de antemão a ajuda de todos! Abs #----------Remover Objetos----------# rm(list = ls()) #----------Selecionar arquivo de interesse----------# a = read.table("x.txt", sep = "\t", header = T); head(a) #----------Iniciar o BH----------# a$P.ETP = a$RAIN-a$ETP.Penman cad = 100 a$NAc = NA a$ARMi = NA a$ARMf = NA a$ALT = NA a$ETR = NA a$DEF = NA a$EXC = NA head(a) a$NAc[1] = 0 a$ARMi[1] = cad a$ARMf[1] = cad a$ALT[1] = 0 for(i in 2:length(a[,1])){ if(a$P.ETP[i]<0){ (a$NAc[i] = a$P.ETP[i]+a$NAc[i-1]) a$ARMi[i] = (cad*exp(-1*((abs(a$NAc[i]))/cad))) }else{ a$ARMf[i] = ifelse(a$ARMi[i] > cad, cad, a$ARMi[i]) a$ARMi[i] = a$ARMf[i-1]+a$P.ETP[i] a$NAc[i] = cad*log((a$ARMf[i])/cad) } a$ALT[i] = a$ARMf[i] - a$ARMf[i-1] a$ETR[i] = if(a$P.ETP[i]<0){a$RAIN[i]+abs(a$ALT[i])} else{a$ETP.Penman[i]} a$DEF[i] = a$ETP.Penman[i] - a$ETR[i] a$EXC[i] = a$ARMi[i] - a$ARMf[i] } View(a) Yury Duarte Engenheiro Agrônomo - ESALQ/USP _______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forne� c�igo m�imo reproduz�el.