Augusto,
No "yes" do seu primeiro ifelse você manda alterar todos os valores de y.values2 para sqrt(x.values). E faz isso de novo em todos os outros casos. O problema, na verdade, é que o ifelse não funciona com vetores lógicos no primeiro parâmetro, mas eu entendi o que você estava pensando e faz sentido mesmo.
Para usar o ifelse no exemplo do livro você deveria fazer um laço de repetição com os índices dos vetores, assim como no livro:
Eu não entendo muito de matemática, é de um exercicio de um livro que estava resolvendo tentando melhorar um pouquinho.Ta na imagem ali em cima. Eu interpretei certo?Ai eu consegui fazer o que o exercício propunha mas não tinha entendido pq acontecia aqui com o ifelse, agora com a resposta do Benilton deu pra imaginar :)Abraço :)Em 29 de setembro de 2011 12:50, Pedro Rafael <pedro.rafael.marinho@gmail.com> escreveu:
_______________________________________________x ≤ 0 ∈ (0, 1]? não seria x ≤ 0 ∈ [0, 1]?
Em 29 de setembro de 2011 12:28, beniltoncarvalho [via R-br] <ml-node+s2285057n3856260h37@n4.nabble.com> escreveu:
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--
On Thursday, 29 September 2011, Augusto Ribas <[hidden email]> wrote:
> 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? > Lattes: http://lattes.cnpq.br/7355685961127056
>
>
Successful people ask better questions, and as a result, they get better answers. (Tony Robbins)
_______________________________________________
R-br mailing list
[hidden email]
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.
http://r-br.2285057.n4.nabble.com/R-br-Duvida-sobre-if-e-ifelse-no-R-tp3856175p3856260.htmlIf you reply to this email, your message will be added to the discussion below:To unsubscribe from R-br, click here.--
Saudações,Pedro Rafael Diniz Marinho.Estatístico - Secretaria de Estado da Saúde - PB.
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.--
_______________________________________________
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.