
Boa tarde, Tenho a seguinte situação, tenho três variáveis: Sit, d1 e d2. Gostaria que um valor (k) fosse calculado levando em consideração o valor de Sit, ou seja, para cada Sit uma fórmula diferente seria usada, como abaixo. Sit=c(3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) d1=c(1.27, 5.80, 2.42, 3.11, 5.25, 4.74, 5.42, 5.14, 5.27, 5.61, 6.09, 6.38, 6.34, 8.60, 7.36, 9.96, 10.86, 11.35, 8.94, 9.19, 8.66, 8.98, 9.86, 9.94, 11.59, 15.61, 6.28, 7.83, 7.94, 7.67, 8.62, 9.43, 9.00) d2=c(9.12, 10.81, 10.21, 7.11, 7.23, 7.62, 7.69, 7.59, 5.73, 5.39, 5.35, 5.42, 5.32, 3.84, 2.89, 0.70, 1.65, 2.32, 4.01, 4.16, 4.32, 4.74, 5.12, 3.01, 1.91, 7.33, 3.81, 2.27, 2.22, 4.44, 4.76, 7.35, 7.35) for(i in 1:seq_along(Sit)){ if(Sit==1){ k<-(100 + d1 ^ 2 - d2 ^ 2) / 20 } else if(Sit==2){ k<-(10 + (100 + d1 ^ 2 - d2 ^ 2) / 20) } else { k<-(400 + d1 ^ 2 - d2 ^ 2) / 40 } print(k) } No entanto, o R me retorna a seguinte mensagem: [1] 7.960963 7.919597 7.540307 8.978000 9.382240 9.110080 9.256007 9.220288 9.873500 10.060500 10.211640 10.283200 10.297330 11.480360 11.145437 [16] 12.467790 12.880427 13.086003 11.596087 11.678762 11.408330 11.454320 11.775130 12.243588 13.267000 14.748580 10.623057 11.403900 11.452880 10.977882 [31] 11.291170 10.872560 10.674437 Mensagens de aviso perdidas: 1: In 1:seq_along(Sit) : expressão numérica tem 33 elementos: somente o primeiro usado 2: In if (Sit == 1) { : a condição tem comprimento > 1 e somente o primeiro elemento será usado 3: In if (Sit == 2) { : a condição tem comprimento > 1 e somente o primeiro elemento será usado Parece que ele está calculando usando apenas a terceira fórmula. Alguém pode dar uma luz? Obrigada, Emily

Seria isso? for(i in Sit){ if(i==1){ k<-(100 + d1 ^ 2 - d2 ^ 2) / 20 } else if(i==2){ k<-(10 + (100 + d1 ^ 2 - d2 ^ 2) / 20) } else { k<-(400 + d1 ^ 2 - d2 ^ 2) / 40 } print(k) } Em 25 de abril de 2014 16:30, Evelyn Alecrim <alecryn@yahoo.com.br>escreveu:
Boa tarde,
Tenho a seguinte situação, tenho três variáveis: Sit, d1 e d2. Gostaria que um valor (k) fosse calculado levando em consideração o valor de Sit, ou seja, para cada Sit uma fórmula diferente seria usada, como abaixo.
Sit=c(3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
d1=c(1.27, 5.80, 2.42, 3.11, 5.25, 4.74, 5.42, 5.14, 5.27, 5.61, 6.09, 6.38, 6.34, 8.60, 7.36, 9.96, 10.86, 11.35, 8.94, 9.19, 8.66, 8.98, 9.86, 9.94, 11.59, 15.61, 6.28, 7.83, 7.94, 7.67, 8.62, 9.43, 9.00)
d2=c(9.12, 10.81, 10.21, 7.11, 7.23, 7.62, 7.69, 7.59, 5.73, 5.39, 5.35, 5.42, 5.32, 3.84, 2.89, 0.70, 1.65, 2.32, 4.01, 4.16, 4.32, 4.74, 5.12, 3.01, 1.91, 7.33, 3.81, 2.27, 2.22, 4.44, 4.76, 7.35, 7.35)
for(i in 1:seq_along(Sit)){ if(Sit==1){ k<-(100 + d1 ^ 2 - d2 ^ 2) / 20
} else if(Sit==2){ k<-(10 + (100 + d1 ^ 2 - d2 ^ 2) / 20) } else { k<-(400 + d1 ^ 2 - d2 ^ 2) / 40 } print(k) }
No entanto, o R me retorna a seguinte mensagem:
[1] 7.960963 7.919597 7.540307 8.978000 9.382240 9.110080 9.256007 9.220288 9.873500 10.060500 10.211640 10.283200 10.297330 11.480360 11.145437 [16] 12.467790 12.880427 13.086003 11.596087 11.678762 11.408330 11.454320 11.775130 12.243588 13.267000 14.748580 10.623057 11.403900 11.452880 10.977882 [31] 11.291170 10.872560 10.674437 Mensagens de aviso perdidas: 1: In 1:seq_along(Sit) : expressão numérica tem 33 elementos: somente o primeiro usado 2: In if (Sit == 1) { : a condição tem comprimento > 1 e somente o primeiro elemento será usado 3: In if (Sit == 2) { : a condição tem comprimento > 1 e somente o primeiro elemento será usado
Parece que ele está calculando usando apenas a terceira fórmula. Alguém pode dar uma luz? Obrigada, Emily
_______________________________________________ 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ça código mínimo reproduzível.
-- *Luciano F. Sgarbi * * Currículo Lattes <http://lattes.cnpq.br/9788198135883354> **Dep. Ecologia, Instituto de Ciências Biológicas I* *Universidade Federal de Goiás, campus II, Goiânia-GO, Brasil*

Gente, Da maneira que está o script, k vai ser um vetor... não uma constante, como Emily quer, suponho. E outra: a cada volta do loop, k é substituído por um novo vetor... Emily: k é um vetor mesmo, como estou pensando?? Ou... k era pra ser uma constante? (dependendo da resposta, a solução se torna mais tranquila). Abs. Em 25 de abril de 2014 16:37, Luciano F. Sgarbi <luciano.f.sgarbi@gmail.com>escreveu:
Seria isso? for(i in Sit){ if(i==1){ k<-(100 + d1 ^ 2 - d2 ^ 2) / 20
} else if(i==2){ k<-(10 + (100 + d1 ^ 2 - d2 ^ 2) / 20) } else { k<-(400 + d1 ^ 2 - d2 ^ 2) / 40 } print(k) }
Em 25 de abril de 2014 16:30, Evelyn Alecrim <alecryn@yahoo.com.br>escreveu:
Boa tarde,
Tenho a seguinte situação, tenho três variáveis: Sit, d1 e d2. Gostaria que um valor (k) fosse calculado levando em consideração o valor de Sit, ou seja, para cada Sit uma fórmula diferente seria usada, como abaixo.
Sit=c(3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
d1=c(1.27, 5.80, 2.42, 3.11, 5.25, 4.74, 5.42, 5.14, 5.27, 5.61, 6.09, 6.38, 6.34, 8.60, 7.36, 9.96, 10.86, 11.35, 8.94, 9.19, 8.66, 8.98, 9.86, 9.94, 11.59, 15.61, 6.28, 7.83, 7.94, 7.67, 8.62, 9.43, 9.00)
d2=c(9.12, 10.81, 10.21, 7.11, 7.23, 7.62, 7.69, 7.59, 5.73, 5.39, 5.35, 5.42, 5.32, 3.84, 2.89, 0.70, 1.65, 2.32, 4.01, 4.16, 4.32, 4.74, 5.12, 3.01, 1.91, 7.33, 3.81, 2.27, 2.22, 4.44, 4.76, 7.35, 7.35)
for(i in 1:seq_along(Sit)){ if(Sit==1){ k<-(100 + d1 ^ 2 - d2 ^ 2) / 20
} else if(Sit==2){ k<-(10 + (100 + d1 ^ 2 - d2 ^ 2) / 20) } else { k<-(400 + d1 ^ 2 - d2 ^ 2) / 40 } print(k) }
No entanto, o R me retorna a seguinte mensagem:
[1] 7.960963 7.919597 7.540307 8.978000 9.382240 9.110080 9.256007 9.220288 9.873500 10.060500 10.211640 10.283200 10.297330 11.480360 11.145437 [16] 12.467790 12.880427 13.086003 11.596087 11.678762 11.408330 11.454320 11.775130 12.243588 13.267000 14.748580 10.623057 11.403900 11.452880 10.977882 [31] 11.291170 10.872560 10.674437 Mensagens de aviso perdidas: 1: In 1:seq_along(Sit) : expressão numérica tem 33 elementos: somente o primeiro usado 2: In if (Sit == 1) { : a condição tem comprimento > 1 e somente o primeiro elemento será usado 3: In if (Sit == 2) { : a condição tem comprimento > 1 e somente o primeiro elemento será usado
Parece que ele está calculando usando apenas a terceira fórmula. Alguém pode dar uma luz? Obrigada, Emily
_______________________________________________ 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ça código mínimo reproduzível.
--
*Luciano F. Sgarbi *
* Currículo Lattes <http://lattes.cnpq.br/9788198135883354> **Dep. Ecologia, Instituto de Ciências Biológicas I* *Universidade Federal de Goiás, campus II, Goiânia-GO, Brasil*
_______________________________________________ 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ça código mínimo reproduzível.
-- Prof. Márcio Souza, M.Sc. *Pesquisador - UFJF * *Professor - INSTITUTO VIANNA JÚNIOR (JF)* * INSTITUTO METODISTA GRAMBERY (JF)* http://lattes.cnpq.br/4578008002785684

ou seria isto? ifelse(Sit==1,(100 + d1 ^ 2 - d2 ^ 2) / 20,ifelse(Sit==2,(10 + (100 + d1 ^ 2 - d2 ^ 2) / 20),(400 + d1 ^ 2 - d2 ^ 2) / 40)) Em 25 de abril de 2014 16:51, Márcio Souza <souza.mlm@gmail.com> escreveu:
Gente,
Da maneira que está o script, k vai ser um vetor... não uma constante, como Emily quer, suponho. E outra: a cada volta do loop, k é substituído por um novo vetor...
Emily: k é um vetor mesmo, como estou pensando?? Ou... k era pra ser uma constante? (dependendo da resposta, a solução se torna mais tranquila).
Abs.
Em 25 de abril de 2014 16:37, Luciano F. Sgarbi < luciano.f.sgarbi@gmail.com> escreveu:
Seria isso?
for(i in Sit){ if(i==1){ k<-(100 + d1 ^ 2 - d2 ^ 2) / 20
} else if(i==2){ k<-(10 + (100 + d1 ^ 2 - d2 ^ 2) / 20) } else { k<-(400 + d1 ^ 2 - d2 ^ 2) / 40 } print(k) }
Em 25 de abril de 2014 16:30, Evelyn Alecrim <alecryn@yahoo.com.br>escreveu:
Boa tarde,
Tenho a seguinte situação, tenho três variáveis: Sit, d1 e d2. Gostaria que um valor (k) fosse calculado levando em consideração o valor de Sit, ou seja, para cada Sit uma fórmula diferente seria usada, como abaixo.
Sit=c(3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
d1=c(1.27, 5.80, 2.42, 3.11, 5.25, 4.74, 5.42, 5.14, 5.27, 5.61, 6.09, 6.38, 6.34, 8.60, 7.36, 9.96, 10.86, 11.35, 8.94, 9.19, 8.66, 8.98, 9.86, 9.94, 11.59, 15.61, 6.28, 7.83, 7.94, 7.67, 8.62, 9.43, 9.00)
d2=c(9.12, 10.81, 10.21, 7.11, 7.23, 7.62, 7.69, 7.59, 5.73, 5.39, 5.35, 5.42, 5.32, 3.84, 2.89, 0.70, 1.65, 2.32, 4.01, 4.16, 4.32, 4.74, 5.12, 3.01, 1.91, 7.33, 3.81, 2.27, 2.22, 4.44, 4.76, 7.35, 7.35)
for(i in 1:seq_along(Sit)){ if(Sit==1){ k<-(100 + d1 ^ 2 - d2 ^ 2) / 20
} else if(Sit==2){ k<-(10 + (100 + d1 ^ 2 - d2 ^ 2) / 20) } else { k<-(400 + d1 ^ 2 - d2 ^ 2) / 40 } print(k) }
No entanto, o R me retorna a seguinte mensagem:
[1] 7.960963 7.919597 7.540307 8.978000 9.382240 9.110080 9.256007 9.220288 9.873500 10.060500 10.211640 10.283200 10.297330 11.480360 11.145437 [16] 12.467790 12.880427 13.086003 11.596087 11.678762 11.408330 11.454320 11.775130 12.243588 13.267000 14.748580 10.623057 11.403900 11.452880 10.977882 [31] 11.291170 10.872560 10.674437 Mensagens de aviso perdidas: 1: In 1:seq_along(Sit) : expressão numérica tem 33 elementos: somente o primeiro usado 2: In if (Sit == 1) { : a condição tem comprimento > 1 e somente o primeiro elemento será usado 3: In if (Sit == 2) { : a condição tem comprimento > 1 e somente o primeiro elemento será usado
Parece que ele está calculando usando apenas a terceira fórmula. Alguém pode dar uma luz? Obrigada, Emily
_______________________________________________ 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ça código mínimo reproduzível.
--
*Luciano F. Sgarbi *
* Currículo Lattes <http://lattes.cnpq.br/9788198135883354> **Dep. Ecologia, Instituto de Ciências Biológicas I* *Universidade Federal de Goiás, campus II, Goiânia-GO, Brasil*
_______________________________________________ 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ça código mínimo reproduzível.
--
Prof. Márcio Souza, M.Sc. *Pesquisador - UFJF * *Professor - INSTITUTO VIANNA JÚNIOR (JF)* * INSTITUTO METODISTA GRAMBERY (JF)*
http://lattes.cnpq.br/4578008002785684
_______________________________________________ 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ça código mínimo reproduzível.

como referencia vejam cbind(Sit,d1,d2,ct1 = (100 + d1 ^ 2 - d2 ^ 2) / 20, ct2 = (10 + (100 + d1 ^ 2 - d2 ^ 2) / 20), ct3 = (400 + d1 ^ 2 - d2 ^ 2) / 40, ctF = ifelse(Sit==1,(100 + d1 ^ 2 - d2 ^ 2) / 20,ifelse(Sit==2,(10 + (100 + d1 ^ 2 - d2 ^ 2) / 20),(400 + d1 ^ 2 - d2 ^ 2) / 40))) Em 25 de abril de 2014 17:05, Leandro Marino < leandromarino@leandromarino.com.br> escreveu:
ou seria isto?
ifelse(Sit==1,(100 + d1 ^ 2 - d2 ^ 2) / 20,ifelse(Sit==2,(10 + (100 + d1 ^ 2 - d2 ^ 2) / 20),(400 + d1 ^ 2 - d2 ^ 2) / 40))
Em 25 de abril de 2014 16:51, Márcio Souza <souza.mlm@gmail.com> escreveu:
Gente,
Da maneira que está o script, k vai ser um vetor... não uma constante, como Emily quer, suponho. E outra: a cada volta do loop, k é substituído por um novo vetor...
Emily: k é um vetor mesmo, como estou pensando?? Ou... k era pra ser uma constante? (dependendo da resposta, a solução se torna mais tranquila).
Abs.
Em 25 de abril de 2014 16:37, Luciano F. Sgarbi < luciano.f.sgarbi@gmail.com> escreveu:
Seria isso?
for(i in Sit){ if(i==1){ k<-(100 + d1 ^ 2 - d2 ^ 2) / 20
} else if(i==2){ k<-(10 + (100 + d1 ^ 2 - d2 ^ 2) / 20) } else { k<-(400 + d1 ^ 2 - d2 ^ 2) / 40 } print(k) }
Em 25 de abril de 2014 16:30, Evelyn Alecrim <alecryn@yahoo.com.br>escreveu:
Boa tarde,
Tenho a seguinte situação, tenho três variáveis: Sit, d1 e d2. Gostaria que um valor (k) fosse calculado levando em consideração o valor de Sit, ou seja, para cada Sit uma fórmula diferente seria usada, como abaixo.
Sit=c(3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
d1=c(1.27, 5.80, 2.42, 3.11, 5.25, 4.74, 5.42, 5.14, 5.27, 5.61, 6.09, 6.38, 6.34, 8.60, 7.36, 9.96, 10.86, 11.35, 8.94, 9.19, 8.66, 8.98, 9.86, 9.94, 11.59, 15.61, 6.28, 7.83, 7.94, 7.67, 8.62, 9.43, 9.00)
d2=c(9.12, 10.81, 10.21, 7.11, 7.23, 7.62, 7.69, 7.59, 5.73, 5.39, 5.35, 5.42, 5.32, 3.84, 2.89, 0.70, 1.65, 2.32, 4.01, 4.16, 4.32, 4.74, 5.12, 3.01, 1.91, 7.33, 3.81, 2.27, 2.22, 4.44, 4.76, 7.35, 7.35)
for(i in 1:seq_along(Sit)){ if(Sit==1){ k<-(100 + d1 ^ 2 - d2 ^ 2) / 20
} else if(Sit==2){ k<-(10 + (100 + d1 ^ 2 - d2 ^ 2) / 20) } else { k<-(400 + d1 ^ 2 - d2 ^ 2) / 40 } print(k) }
No entanto, o R me retorna a seguinte mensagem:
[1] 7.960963 7.919597 7.540307 8.978000 9.382240 9.110080 9.256007 9.220288 9.873500 10.060500 10.211640 10.283200 10.297330 11.480360 11.145437 [16] 12.467790 12.880427 13.086003 11.596087 11.678762 11.408330 11.454320 11.775130 12.243588 13.267000 14.748580 10.623057 11.403900 11.452880 10.977882 [31] 11.291170 10.872560 10.674437 Mensagens de aviso perdidas: 1: In 1:seq_along(Sit) : expressão numérica tem 33 elementos: somente o primeiro usado 2: In if (Sit == 1) { : a condição tem comprimento > 1 e somente o primeiro elemento será usado 3: In if (Sit == 2) { : a condição tem comprimento > 1 e somente o primeiro elemento será usado
Parece que ele está calculando usando apenas a terceira fórmula. Alguém pode dar uma luz? Obrigada, Emily
_______________________________________________ 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ça código mínimo reproduzível.
--
*Luciano F. Sgarbi *
* Currículo Lattes <http://lattes.cnpq.br/9788198135883354> **Dep. Ecologia, Instituto de Ciências Biológicas I* *Universidade Federal de Goiás, campus II, Goiânia-GO, Brasil*
_______________________________________________ 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ça código mínimo reproduzível.
--
Prof. Márcio Souza, M.Sc. *Pesquisador - UFJF * *Professor - INSTITUTO VIANNA JÚNIOR (JF)* * INSTITUTO METODISTA GRAMBERY (JF)*
http://lattes.cnpq.br/4578008002785684
_______________________________________________ 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ça código mínimo reproduzível.

Boa noite! Muito obrigada a todos! Testei todas as soluções e elas foram muito úteis. Realmente faltava a indexação. Em 25 de abril de 2014 17:05, Leandro Marino < leandromarino@leandromarino.com.br> escreveu:
ou seria isto?
ifelse(Sit==1,(100 + d1 ^ 2 - d2 ^ 2) / 20,ifelse(Sit==2,(10 + (100 + d1 ^ 2 - d2 ^ 2) / 20),(400 + d1 ^ 2 - d2 ^ 2) / 40))
Em 25 de abril de 2014 16:51, Márcio Souza <souza.mlm@gmail.com> escreveu:
Gente,
Da maneira que está o script, k vai ser um vetor... não uma constante, como Emily quer, suponho. E outra: a cada volta do loop, k é substituído por um novo vetor...
Emily: k é um vetor mesmo, como estou pensando?? Ou... k era pra ser uma constante? (dependendo da resposta, a solução se torna mais tranquila).
Abs.
Em 25 de abril de 2014 16:37, Luciano F. Sgarbi < luciano.f.sgarbi@gmail.com> escreveu:
Seria isso?
for(i in Sit){ if(i==1){ k<-(100 + d1 ^ 2 - d2 ^ 2) / 20
} else if(i==2){ k<-(10 + (100 + d1 ^ 2 - d2 ^ 2) / 20) } else { k<-(400 + d1 ^ 2 - d2 ^ 2) / 40 } print(k) }
Em 25 de abril de 2014 16:30, Evelyn Alecrim <alecryn@yahoo.com.br>escreveu:
Boa tarde,
Tenho a seguinte situação, tenho três variáveis: Sit, d1 e d2. Gostaria que um valor (k) fosse calculado levando em consideração o valor de Sit, ou seja, para cada Sit uma fórmula diferente seria usada, como abaixo.
Sit=c(3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
d1=c(1.27, 5.80, 2.42, 3.11, 5.25, 4.74, 5.42, 5.14, 5.27, 5.61, 6.09, 6.38, 6.34, 8.60, 7.36, 9.96, 10.86, 11.35, 8.94, 9.19, 8.66, 8.98, 9.86, 9.94, 11.59, 15.61, 6.28, 7.83, 7.94, 7.67, 8.62, 9.43, 9.00)
d2=c(9.12, 10.81, 10.21, 7.11, 7.23, 7.62, 7.69, 7.59, 5.73, 5.39, 5.35, 5.42, 5.32, 3.84, 2.89, 0.70, 1.65, 2.32, 4.01, 4.16, 4.32, 4.74, 5.12, 3.01, 1.91, 7.33, 3.81, 2.27, 2.22, 4.44, 4.76, 7.35, 7.35)
for(i in 1:seq_along(Sit)){ if(Sit==1){ k<-(100 + d1 ^ 2 - d2 ^ 2) / 20
} else if(Sit==2){ k<-(10 + (100 + d1 ^ 2 - d2 ^ 2) / 20) } else { k<-(400 + d1 ^ 2 - d2 ^ 2) / 40 } print(k) }
No entanto, o R me retorna a seguinte mensagem:
[1] 7.960963 7.919597 7.540307 8.978000 9.382240 9.110080 9.256007 9.220288 9.873500 10.060500 10.211640 10.283200 10.297330 11.480360 11.145437 [16] 12.467790 12.880427 13.086003 11.596087 11.678762 11.408330 11.454320 11.775130 12.243588 13.267000 14.748580 10.623057 11.403900 11.452880 10.977882 [31] 11.291170 10.872560 10.674437 Mensagens de aviso perdidas: 1: In 1:seq_along(Sit) : expressão numérica tem 33 elementos: somente o primeiro usado 2: In if (Sit == 1) { : a condição tem comprimento > 1 e somente o primeiro elemento será usado 3: In if (Sit == 2) { : a condição tem comprimento > 1 e somente o primeiro elemento será usado
Parece que ele está calculando usando apenas a terceira fórmula. Alguém pode dar uma luz? Obrigada, Emily
_______________________________________________ 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ça código mínimo reproduzível.
--
*Luciano F. Sgarbi *
* Currículo Lattes <http://lattes.cnpq.br/9788198135883354> **Dep. Ecologia, Instituto de Ciências Biológicas I* *Universidade Federal de Goiás, campus II, Goiânia-GO, Brasil*
_______________________________________________ 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ça código mínimo reproduzível.
--
Prof. Márcio Souza, M.Sc. *Pesquisador - UFJF * *Professor - INSTITUTO VIANNA JÚNIOR (JF)* * INSTITUTO METODISTA GRAMBERY (JF)*
http://lattes.cnpq.br/4578008002785684
_______________________________________________ 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ça código mínimo reproduzível.
-- Evelyn da Fonseca Alecrim Bragion Bióloga - Mestre em Ecologia Aplicada Doutoranda em Engenharia Florestal Laboratório de Ecologia Vegetal UFLA - Lavras, MG/Brasil

Exercicio entender pq isso funciona: f1 = function(d1, d2) (100 + d1 ^ 2 - d2 ^ 2) / 20 f1(d1, d2) * ifelse(Sit<=2, 1, .5) + 10*(Sit==2) + 7.5*(Sit==3) Em 26 de abril de 2014 19:50, Evelyn Alecrim <evelyn.alecrim@gmail.com>escreveu:
Boa noite! Muito obrigada a todos! Testei todas as soluções e elas foram muito úteis. Realmente faltava a indexação.
Em 25 de abril de 2014 17:05, Leandro Marino < leandromarino@leandromarino.com.br> escreveu:
ou seria isto?
ifelse(Sit==1,(100 + d1 ^ 2 - d2 ^ 2) / 20,ifelse(Sit==2,(10 + (100 + d1 ^ 2 - d2 ^ 2) / 20),(400 + d1 ^ 2 - d2 ^ 2) / 40))
Em 25 de abril de 2014 16:51, Márcio Souza <souza.mlm@gmail.com>escreveu:
Gente,
Da maneira que está o script, k vai ser um vetor... não uma constante, como Emily quer, suponho. E outra: a cada volta do loop, k é substituído por um novo vetor...
Emily: k é um vetor mesmo, como estou pensando?? Ou... k era pra ser uma constante? (dependendo da resposta, a solução se torna mais tranquila).
Abs.
Em 25 de abril de 2014 16:37, Luciano F. Sgarbi < luciano.f.sgarbi@gmail.com> escreveu:
Seria isso?
for(i in Sit){ if(i==1){ k<-(100 + d1 ^ 2 - d2 ^ 2) / 20
} else if(i==2){ k<-(10 + (100 + d1 ^ 2 - d2 ^ 2) / 20) } else { k<-(400 + d1 ^ 2 - d2 ^ 2) / 40 } print(k) }
Em 25 de abril de 2014 16:30, Evelyn Alecrim <alecryn@yahoo.com.br>escreveu:
Boa tarde,
Tenho a seguinte situação, tenho três variáveis: Sit, d1 e d2. Gostaria que um valor (k) fosse calculado levando em consideração o valor de Sit, ou seja, para cada Sit uma fórmula diferente seria usada, como abaixo.
Sit=c(3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
d1=c(1.27, 5.80, 2.42, 3.11, 5.25, 4.74, 5.42, 5.14, 5.27, 5.61, 6.09, 6.38, 6.34, 8.60, 7.36, 9.96, 10.86, 11.35, 8.94, 9.19, 8.66, 8.98, 9.86, 9.94, 11.59, 15.61, 6.28, 7.83, 7.94, 7.67, 8.62, 9.43, 9.00)
d2=c(9.12, 10.81, 10.21, 7.11, 7.23, 7.62, 7.69, 7.59, 5.73, 5.39, 5.35, 5.42, 5.32, 3.84, 2.89, 0.70, 1.65, 2.32, 4.01, 4.16, 4.32, 4.74, 5.12, 3.01, 1.91, 7.33, 3.81, 2.27, 2.22, 4.44, 4.76, 7.35, 7.35)
for(i in 1:seq_along(Sit)){ if(Sit==1){ k<-(100 + d1 ^ 2 - d2 ^ 2) / 20
} else if(Sit==2){ k<-(10 + (100 + d1 ^ 2 - d2 ^ 2) / 20) } else { k<-(400 + d1 ^ 2 - d2 ^ 2) / 40 } print(k) }
No entanto, o R me retorna a seguinte mensagem:
[1] 7.960963 7.919597 7.540307 8.978000 9.382240 9.110080 9.256007 9.220288 9.873500 10.060500 10.211640 10.283200 10.297330 11.480360 11.145437 [16] 12.467790 12.880427 13.086003 11.596087 11.678762 11.408330 11.454320 11.775130 12.243588 13.267000 14.748580 10.623057 11.403900 11.452880 10.977882 [31] 11.291170 10.872560 10.674437 Mensagens de aviso perdidas: 1: In 1:seq_along(Sit) : expressão numérica tem 33 elementos: somente o primeiro usado 2: In if (Sit == 1) { : a condição tem comprimento > 1 e somente o primeiro elemento será usado 3: In if (Sit == 2) { : a condição tem comprimento > 1 e somente o primeiro elemento será usado
Parece que ele está calculando usando apenas a terceira fórmula. Alguém pode dar uma luz? Obrigada, Emily
_______________________________________________ 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ça código mínimo reproduzível.
--
*Luciano F. Sgarbi *
* Currículo Lattes <http://lattes.cnpq.br/9788198135883354> **Dep. Ecologia, Instituto de Ciências Biológicas I* *Universidade Federal de Goiás, campus II, Goiânia-GO, Brasil*
_______________________________________________ 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ça código mínimo reproduzível.
--
Prof. Márcio Souza, M.Sc. *Pesquisador - UFJF * *Professor - INSTITUTO VIANNA JÚNIOR (JF)* * INSTITUTO METODISTA GRAMBERY (JF)*
http://lattes.cnpq.br/4578008002785684
_______________________________________________ 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ça código mínimo reproduzível.
-- Evelyn da Fonseca Alecrim Bragion Bióloga - Mestre em Ecologia Aplicada Doutoranda em Engenharia Florestal Laboratório de Ecologia Vegetal UFLA - Lavras, MG/Brasil
_______________________________________________ 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ça código mínimo reproduzível.

Evelyn e demais colegas, boa tarde! Acredito que basicamente faltou atribuir o índice (i) dos elementos a serem usados em cada rodada ou verificação. Pode ser resolvido com uso de loops ou não. No código abaixo tem três opções que testei. ### <code r> Sit=c(3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) d1=c(1.27, 5.80, 2.42, 3.11, 5.25, 4.74, 5.42, 5.14, 5.27, 5.61, 6.09, 6.38, 6.34, 8.60, 7.36, 9.96, 10.86, 11.35, 8.94, 9.19, 8.66, 8.98, 9.86, 9.94, 11.59, 15.61, 6.28, 7.83, 7.94, 7.67, 8.62, 9.43, 9.00) d2=c(9.12, 10.81, 10.21, 7.11, 7.23, 7.62, 7.69, 7.59, 5.73, 5.39, 5.35, 5.42, 5.32, 3.84, 2.89, 0.70, 1.65, 2.32, 4.01, 4.16, 4.32, 4.74, 5.12, 3.01, 1.91, 7.33, 3.81, 2.27, 2.22, 4.44, 4.76, 7.35, 7.35) ############# ### Solução 1 ############# for(i in seq_along(Sit)){ if (i==1) k1 <- as.vector(NULL) if(Sit[i]==1) {ktmp <- (100 + d1[i]^2 - d2[i]^2) / 20} else if(Sit[i]==2) {ktmp <- (10 + (100 + d1[i]^2 - d2[i]^2) / 20)} else {ktmp <- (400 + d1[i]^2 - d2[i]^2) / 40} k1 <- c(k1,ktmp) } ############# ### Solução 2 ############# for(i in seq_along(Sit)) { if (i==1) k2 <- as.vector(NULL) ktmp <- (switch(Sit[i], (100 + d1[i]^2 - d2[i]^2) / 20, (10 + (100 + d1[i]^2 - d2[i]^2) / 20), (400 + d1[i]^2 - d2[i]^2) / 40)) k2 <- c(k2,ktmp) } ############# ### Solução 3 ############# { df <- data.frame(Sit, d1, d2) df$k3 <- NA; df i <- which(Sit==1); df$k3[i] <- (100 + d1[i]^2 - d2[i]^2) / 20 i <- which(Sit==2); df$k3[i] <- (10 + (100 + d1[i]^2 - d2[i]^2) / 20) i <- which(Sit==3); df$k3[i] <- (400 + d1[i]^2 - d2[i]^2) / 40 df k3 <- df$k3 } all.equal(k1, k2, k3) # [1] TRUE ### </code> Éder Comunello <c <comunello.eder@gmail.com>omunello.eder@gmail.com> Dourados, MS - [22 16.5'S, 54 49'W]

Oi pessoal, k é um vetor mesmo. Com a solução da Deisy as mensagens de erro desapareceram, no entanto os valores que retornam são relativos a sit==3. Não estou em casa agora, quando chegar testo a outra solução do Leandro. Muito obrigada pela disposição! Ah, só uma coisa, meu nome é Evelyn, rsrs o autocorretor mudou para Emily. Gente, Da maneira que está o script, k vai ser um vetor... não uma constante, como Emily quer, suponho. E outra: a cada volta do loop, k é substituído por um novo vetor... Emily: k é um vetor mesmo, como estou pensando?? Ou... k era pra ser uma constante? (dependendo da resposta, a solução se torna mais tranquila). Abs. Em 25 de abril de 2014 16:37, Luciano F. Sgarbi <luciano.f.sgarbi@gmail.com>escreveu:
Seria isso? for(i in Sit){ if(i==1){ k<-(100 + d1 ^ 2 - d2 ^ 2) / 20
} else if(i==2){ k<-(10 + (100 + d1 ^ 2 - d2 ^ 2) / 20) } else { k<-(400 + d1 ^ 2 - d2 ^ 2) / 40 } print(k) }
Em 25 de abril de 2014 16:30, Evelyn Alecrim <alecryn@yahoo.com.br>escreveu:
Boa tarde,
Tenho a seguinte situação, tenho três variáveis: Sit, d1 e d2. Gostaria que um valor (k) fosse calculado levando em consideração o valor de Sit, ou seja, para cada Sit uma fórmula diferente seria usada, como abaixo.
Sit=c(3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
d1=c(1.27, 5.80, 2.42, 3.11, 5.25, 4.74, 5.42, 5.14, 5.27, 5.61, 6.09, 6.38, 6.34, 8.60, 7.36, 9.96, 10.86, 11.35, 8.94, 9.19, 8.66, 8.98, 9.86, 9.94, 11.59, 15.61, 6.28, 7.83, 7.94, 7.67, 8.62, 9.43, 9.00)
d2=c(9.12, 10.81, 10.21, 7.11, 7.23, 7.62, 7.69, 7.59, 5.73, 5.39, 5.35, 5.42, 5.32, 3.84, 2.89, 0.70, 1.65, 2.32, 4.01, 4.16, 4.32, 4.74, 5.12, 3.01, 1.91, 7.33, 3.81, 2.27, 2.22, 4.44, 4.76, 7.35, 7.35)
for(i in 1:seq_along(Sit)){ if(Sit==1){ k<-(100 + d1 ^ 2 - d2 ^ 2) / 20
} else if(Sit==2){ k<-(10 + (100 + d1 ^ 2 - d2 ^ 2) / 20) } else { k<-(400 + d1 ^ 2 - d2 ^ 2) / 40 } print(k) }
No entanto, o R me retorna a seguinte mensagem:
[1] 7.960963 7.919597 7.540307 8.978000 9.382240 9.110080 9.256007 9.220288 9.873500 10.060500 10.211640 10.283200 10.297330 11.480360 11.145437 [16] 12.467790 12.880427 13.086003 11.596087 11.678762 11.408330 11.454320 11.775130 12.243588 13.267000 14.748580 10.623057 11.403900 11.452880 10.977882 [31] 11.291170 10.872560 10.674437 Mensagens de aviso perdidas: 1: In 1:seq_along(Sit) : expressão numérica tem 33 elementos: somente o primeiro usado 2: In if (Sit == 1) { : a condição tem comprimento > 1 e somente o primeiro elemento será usado 3: In if (Sit == 2) { : a condição tem comprimento > 1 e somente o primeiro elemento será usado
Parece que ele está calculando usando apenas a terceira fórmula. Alguém pode dar uma luz? Obrigada, Emily
_______________________________________________ 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ça código mínimo reproduzível.
--
*Luciano F. Sgarbi *
* Currículo Lattes <http://lattes.cnpq.br/9788198135883354> **Dep. Ecologia, Instituto de Ciências Biológicas I* *Universidade Federal de Goiás, campus II, Goiânia-GO, Brasil*
_______________________________________________ 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ça código mínimo reproduzível.
-- Prof. Márcio Souza, M.Sc. *Pesquisador - UFJF * *Professor - INSTITUTO VIANNA JÚNIOR (JF)* * INSTITUTO METODISTA GRAMBERY (JF)* http://lattes.cnpq.br/4578008002785684
participantes (7)
-
Benilton Carvalho
-
Evelyn Alecrim
-
Evelyn Alecrim
-
Leandro Marino
-
Luciano F. Sgarbi
-
Márcio Souza
-
Éder Comunello