[R-br] Duvida sobre if e ifelse no R
Augusto Ribas
ribas.aca em gmail.com
Quinta Setembro 29 12:12:39 BRT 2011
Ola a todos, tenho uma duvida aqui.
Estou lendo um livro sobre programação em R e empaquei num problema aqui.
Eu tenha a função:
x ≤ 0 ∈ (0, 1] > 1
f(x) −x3 x2 √x
ai resolvo no intervalo de -2 a 2 com o comando if:
#começo do script
rm(list=ls())
# input
x.values <- seq(-2, 2, by = 0.1)
# for each x calculate y
n <- length(x.values)
y.values <- rep(0, n)
for (i in 1:n) {
x<-x.values[i]
# your expression for y goes here
if (x>1) {
y<-sqrt(x)
} else {
if (x<=0) {
y<- -x^3
} else {
y<- x^2
}
}
#end of y expression
y.values[i] <- y
}
# output
plot(x.values, y.values, type = "l")
#até aqui tudo funcionou beleza.
#mas dai fui tentar fazer com ifelse a mesma coisa
y.values2 <- rep(0, n)
resultado<-ifelse(x.values>1,y.values2<-sqrt(x.values),
ifelse(x.values<=0,y.values2<- -x.values^3, y.values2<- x.values^2)
)
#o vetor resultado fica correto
resultado==y.values
#mas o vetor y.values2 fica errado
y.values2==y.values
#o resultado ficou
[1] 8.000000 6.859000 5.832000 4.913000 4.096000 3.375000 2.744000 2.197000
[9] 1.728000 1.331000 1.000000 0.729000 0.512000 0.343000 0.216000 0.125000
[17] 0.064000 0.027000 0.008000 0.001000 0.000000 0.010000 0.040000 0.090000
[25] 0.160000 0.250000 0.360000 0.490000 0.640000 0.810000 1.000000
1.048809 1.303840 1.341641 1.378405
[41] 1.414214
#mas os valores que ficam salvos são no vetor y.values2 são:
> y.values2
[1] 4.00 3.61 3.24 2.89 2.56 2.25 1.96 1.69 1.44 1.21 1.00 0.81 0.64 0.49
0.36
[16] 0.25 0.16 0.09 0.04 0.01 0.00 0.01 0.04 0.09 0.16 0.25 0.36 0.49 0.64
0.81
[31] 1.00 1.21 1.44 1.69 1.96 2.25 2.56 2.89 3.24 3.61 4.00
#minha duvida então é pq ele so resolve tudo elevando ao quadrado
no y.values2
#o que acontece, por exemplo, com o primeiro valor de resultado que vejo 8
qd mas fica salvo 4 quando vou olhar o y.values2.
#alguém pode me iluminar sobre o que esta acontecendo?
--
Grato
Augusto C. A. Ribas
Site Pessoal: http://augustoribas.heliohost.org
Lattes: http://lattes.cnpq.br/7355685961127056
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20110929/157215de/attachment.html>
Mais detalhes sobre a lista de discussão R-br