Índice
O Curso
Material de Apoio
Área dos Alunos
Visitantes
Forum
notaR
Área Restrita
Cursos Anteriores
IBUSP
Outras Insitutições
IBUSP
Outras Insitutições
Obrigada! os comentários já ajudaram, mas não era exatamente isso…ainda há dúvidas existem duas fórmulas dentro da função:uma que transforma os dados em oxigenio dissolvido e outra que transforma o oxigenio dissolvido em % de saturação desse oxigenio na água. Para a primeira fórmula tudo bem, mas para a segunda realmente precisava colocar um data.frame na função para que o argumento “temp” seja associado com a primeira coluna e coloque na fórmula de saturação o valor correspondente da segunda coluna. Eu só consegui fazer isso com o if, mas eu tenho o problema de temp ser um vetor. Se fosse um número faria como no caso da altitude/pressão do código a seguir:
Esta é a função(tem comentários nela):
od=function(t,a,f,N,temp,alt) { # OD em mg/l O=(t*N*8*1000)/(a*((f-4)/f)) #para saber a saturação precisamos dos valores da temperatura e altitude da região #fornece a solubilidade correspondente a temperatura: ts1=seq(0,35) ts2=c(14.63,14.23,13.84,13.46,13.11,12.77,12.45,12.13,11.84,11.55,11.28,11.02,10.77,10.53,10.29,10.07,9.86,9.65,9.45,9.27,9.08,8.91,8.74,8.57,8.42,8.26,8.12,7.97,7.84,7.70,7.57,7.45,7.33,7.21,7.09,6.98) tempsol=data.frame(ts1,ts2) l=length(temp) resul=seq(1,l) for(i in 1:l) { if(tempsol[1,1]==temp[1]){resul[1]=ts[1,2]} if(tempsol[2,1]==temp[1]){resul[1]=ts[2,2]} #assim faria o mesmo para todas as linhas da tabela(deve ter ortra maneira mais simples de escrever isso) #e então teria que fazer para cada número contido no temp,temp{1},temp[2]...(o problema é que o vetor temp não terá sempre o mesmo comprimento e por isso a função ficará limitada) #como faço então para repetir esse procedimento para cada elemento do vetor temp sem ter que repetir tudo? } #fornece a pressão correspondente a altitude da região: #aqui como é só 1 número o if funciona bem if(alt=="0"){pre=760} if(alt=="100"){pre=750} if(alt=="200"){pre=741} if(alt=="300"){pre=732} if(alt=="400"){pre=723} if(alt=="500"){pre=714} if(alt=="600"){pre=705} if(alt=="700"){pre=696} if(alt=="800"){pre=687} if(alt=="900"){pre=679} if(alt=="1000"){pre=671} if(alt=="1100"){pre=663} if(alt=="1200"){pre=655} if(alt=="1300"){pre=647} if(alt=="1400"){pre=639} if(alt=="1500"){pre=631} if(alt=="1600"){pre=623} if(alt=="1700"){pre=615} if(alt=="1800"){pre=608} if(alt=="1900"){pre=601} if(alt=="2000"){pre=594} if(alt=="2100"){pre=587} if(alt=="2200"){pre=580} if(alt=="2300"){pre=573} if(alt=="2400"){pre=566} if(alt=="2500"){pre=560} # % de saturação S=(O*100)/((resul*pre)/760) m=matrix(c(O,S),,2) colnames(m)=c("OD(mg/l)","%saturação") return(m) }
#teste x=c(1,2,3,1) z=c(1,2,1,2) y=c(1,0,0,1) od(x,100,z,1,y,0)
tem alguma maneira então de por exemplo o for ou outra coisa fazer um tipo de looping pegando sequencialmente o primeiro elemento de temp, o segundo elemento….
Obrigada, e desculpe o não saber como se expressar melhor.
Discussão