Traduções desta página:

Ferramentas do usuário

Ferramentas do site


05_curso_antigo:blog:ainda_o_o2

ainda o O2

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

Insira seu comentário. Sintaxe wiki é permitida:
 
05_curso_antigo/blog/ainda_o_o2.txt · Última modificação: 2020/08/12 06:04 (edição externa)