[R-br] Duvida sobre if e ifelse no R

Lucas Barbosa lucasbcr em gmail.com
Sexta Setembro 30 12:12:15 BRT 2011


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:

x.values <- seq(-2, 2, by = 0.1)
n <- length(x.values)
y.values3 <- c()
for (i in 1:n){
x<-x.values[i]
ifelse(x > 1, y <- sqrt(x), ifelse(x <= 0, y <- -x^3, y <- x^2))
y.values3[i] <- y
}
plot(x.values, y.values3, type = "l")
all.equal(y.values, y.values3)

Abraços,
Lucas Cusinato



Em 29 de setembro de 2011 14:32, Augusto Ribas <ribas.aca em gmail.com>escreveu:

> http://img641.imageshack.us/img641/1373/testeeak.jpg
>
> 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 em 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 em 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]<http://user/SendEmail.jtp?type=node&node=3856260&i=0>>
>>> 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?
>>>
>>> >
>>> >
>>> >
>>> >
>>> >
>>> > --
>>> > Grato
>>> > Augusto C. A. Ribas
>>> >
>>> > Site Pessoal: http://augustoribas.heliohost.org
>>> > 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] <http://user/SendEmail.jtp?type=node&node=3856260&i=1>
>>> 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.
>>>
>>> ------------------------------
>>>  If you reply to this email, your message will be added to the
>>> discussion below:
>>>
>>> http://r-br.2285057.n4.nabble.com/R-br-Duvida-sobre-if-e-ifelse-no-R-tp3856175p3856260.html
>>>  To unsubscribe from R-br, click here<http://r-br.2285057.n4.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=3357982&code=cGVkcm8ucmFmYWVsLm1hcmluaG9AZ21haWwuY29tfDMzNTc5ODJ8NTAyMjI0MDYw>.
>>>
>>>
>>
>>
>>
>> --
>> Saudações,
>> Pedro Rafael Diniz Marinho.
>> Estatístico - Secretaria de Estado da Saúde - PB.
>>
>>
>>
>> _______________________________________________
>> R-br mailing list
>> R-br em 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.
>>
>
>
>
> --
> Grato
> Augusto C. A. Ribas
>
> Site Pessoal: http://augustoribas.heliohost.org
> Lattes: http://lattes.cnpq.br/7355685961127056
>
>
> _______________________________________________
> R-br mailing list
> R-br em 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.
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20110930/13ebfa07/attachment.html>


Mais detalhes sobre a lista de discussão R-br