[R-br] duvida em if else

Cesar Rabak cesar.rabak em gmail.com
Sexta Agosto 28 14:25:09 BRT 2015


Leonardo,

Eu já toquei nesse assunto em resposta a outra questão parecida com essa
sua, por isso serei mais breve.

A linguagem R é por excelência uma linguagem voltada para o tratamento de
dados em grupos que *grosso modo* podemos denominar de "matriciais".

Por a maioria das "coisas" que se pode fazer em R são "automagicamente"
feitas em vetores ou matrizes de dados.

Como um exemplo "bobinho" veja:

> 1:10 + 0.07
[1]  1,07  2,07  3,07  4,07  5,07  6,07  7,07  8,07  9,07 10,07

Se você quiser pensar de maneira procedural você *poderia* (mas IMNSHO *não
deve*) fazer:

> for (i in 1:10) print(i + 0.07)
[1] 1,07
[1] 2,07
[1] 3,07
[1] 4,07
[1] 5,07
[1] 6,07
[1] 7,07
[1] 8,07
[1] 9,07
[1] 10,07

Então vejamos:

Seu teste if(x < 4) retorna o vetor

> x < 4
 [1]  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

Mas você está tentando resolver um teste encima de um objeto com dez
elementos e faz um único teste. . .

Veja que no seu caso seu depoimento "porem isso nao esta funcionando." não
está correto de todo, pois o R lhe indica com clareza qual é o problema:
> if(x < 4) {print ("a")} else {print ("b")}
[1] "a"
Mensagens de aviso perdidas:
In if (1:10 < 4) {:
  a condição tem comprimento > 1 e somente o primeiro elemento será usado

Aliás, o seu código no exemplo acima do "if" tem erro de sintaxe, que
talvez esteja mascarando a mensagem de erro:

> if(x < 4) {print ("a")} else {"print ("b)}
Erro: símbolo inesperado in "if(x < 4) {print ("a")} else {"print ("b"

Portanto, entenda que para um programador do R a forma mais clara no script
é a natural da linguagem, como mostrou a Fátima.

Como curiosidade, veja como mesmo o ifelse poderia ser removido, se você
quisesse fazer algo mais "críptico" (que aí eu considero exagero no
malabarismo do uso dos recursos da linguagem, mas vez por outra eu me
deparo em código escrito até pelos mantenedores do corpo de pacotes do R):

>  c("a","b")[(x < 4) + 1]
 [1] "b" "b" "b" "a" "a" "a" "a" "a" "a" "a"

HTH
--
Cesar Rabak


2015-08-23 23:27 GMT-03:00 Leonardo Monteiro <monteiroleonardo6 em gmail.com>:

> Prezados, eu sei que existem outras maneiras (funcoes, tipo ifelse) de se
> fazer isso, porem eu gostaria de fazer pelo if else , pq fica mais claro no
> meu script.
>
>
> bom.. eu venho tentando aplicar a condicao em um vetor, por exemplo
>
> x<- 1:10
> if(x < 4) {print ("a")} else {"print ("b)}
>
> porem isso nao esta funcionando.
>
> Há algum outra maneira de aplicar a funcao if else para teste e/ou
> avaliacao dos dados de um vetor?
>
>
> obrigado,
>
> Leonardo.
>
> _______________________________________________
> 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/20150828/d07f7b76/attachment.html>


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