As operações q vc executa dentro do ifelse são independentes. Por isso não há razoes para y.values2 reter o q vc espera q ele retenha. Ele reteve a ultima operação realizada. b<br><br>On Thursday, 29 September 2011, Augusto Ribas <<a href="mailto:ribas.aca@gmail.com">ribas.aca@gmail.com</a>> wrote:<br>
> Ola a todos, tenho uma duvida aqui.<br>> Estou lendo um livro sobre programação em R e empaquei num problema aqui.<br>> Eu tenha a função:<br>> x ≤ 0 ∈ (0, 1] > 1<br>> f(x) −x3 x2 √x<br>
><br>> ai resolvo no intervalo de -2 a 2 com o comando if:<br>> #começo do script<br>> rm(list=ls())<br>> # input<br>> x.values <- seq(-2, 2, by = 0.1)<br>> # for each x calculate y<br>> n <- length(x.values)<br>
> y.values <- rep(0, n)<br>> for (i in 1:n) {<br>> x<-x.values[i]<br>> # your expression for y goes here<br>> if (x>1) {<br>> y<-sqrt(x)<br>> } else {<br>> if (x<=0) {<br>> y<- -x^3<br>
> } else {<br>> y<- x^2<br>> }<br>> }<br>> #end of y expression<br>> y.values[i] <- y<br>> }<br>> # output<br>> plot(x.values, y.values, type = "l")<br>> #até aqui tudo funcionou beleza.<br>
> #mas dai fui tentar fazer com ifelse a mesma coisa<br>> y.values2 <- rep(0, n)<br>> resultado<-ifelse(x.values>1,y.values2<-sqrt(x.values),<br>> ifelse(x.values<=0,y.values2<- -x.values^3, y.values2<- x.values^2)<br>
> )<br>> #o vetor resultado fica correto<br>> resultado==y.values<br>> #mas o vetor y.values2 fica errado<br>> y.values2==y.values<br>> #o resultado ficou<br>> [1] 8.000000 6.859000 5.832000 4.913000 4.096000 3.375000 2.744000 2.197000<br>
> [9] 1.728000 1.331000 1.000000 0.729000 0.512000 0.343000 0.216000 0.125000<br>> [17] 0.064000 0.027000 0.008000 0.001000 0.000000 0.010000 0.040000 0.090000<br>> [25] 0.160000 0.250000 0.360000 0.490000 0.640000 0.810000 1.000000 1.048809 1.303840 1.341641 1.378405<br>
> [41] 1.414214<br>> #mas os valores que ficam salvos são no vetor y.values2 são:<br>>> y.values2<br>> [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<br>> [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<br>
> [31] 1.00 1.21 1.44 1.69 1.96 2.25 2.56 2.89 3.24 3.61 4.00<br>> #minha duvida então é pq ele so resolve tudo elevando ao quadrado no y.values2<br>> #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.<br>
> #alguém pode me iluminar sobre o que esta acontecendo?<br>><br>><br>><br>><br>><br>> --<br>> Grato<br>> Augusto C. A. Ribas<br>> <br>> Site Pessoal: <a href="http://augustoribas.heliohost.org">http://augustoribas.heliohost.org</a><br>
> Lattes: <a href="http://lattes.cnpq.br/7355685961127056">http://lattes.cnpq.br/7355685961127056</a><br>><br>><br><br>-- <br>Successful people ask better questions, and as a result, they get better answers. (Tony Robbins)<br>