[R-br] Criar função no R com if e for

Fernando Souza nandodesouza em gmail.com
Segunda Setembro 29 20:45:54 BRT 2014


Olha se é isso aí

x=c(-5,-4,-3,-2,-1,0,1,2,3,4,5);x
fr=function(x){
         r=length(x)
         for(i in 1:r){
                 if(x[i]< -3){r[i]=0}
                 else if(x[i]>=-3 && x[i]<=2){r[i]=3*x[i]}
                 else{r[i]=1}
         }
         return(r)
}

rs=fr(x);rs
On 29-09-2014 19:32, Jakson Alves de Aquino wrote:
> 2014-09-29 17:47 GMT-04:00 Rodolfo Souza <rodolfomssouza em gmail.com>:
>> Olá pessoal, gostaria mais uma vez da ajuda de vocês.
>>
>> Eu estou precisando criar uma função no R que tem três condições e após
>> testar todas as condições o programa me retorne um resultado na forma de
>> vetor para cada valor (input) na função.
>> Segue o código que consegui fazer até agora:
>>
>> x=c(-5,-4,-3,-2,-1,0,1,2,3,4,5);x
>>
>> fr=function(x){
>>    r=numeric(length = length(x));
>>    for(i in seq(along=x)){
>>      if(x<-3){r[i]=0}
> Tem dois erros na linha acima. Deveria ser x[i] e não simplesmente x.
> E deveria ser "< -3" e não "<- 3".
>
>>      else if(x>=-3 && x<=2){r[i]=3*x}
> Deveria ser x[i], novamente.
>
> Além disso, o uso do loop for no R é muito lento. Se for trabalhar com
> muitos dados, é melhor escrever uma versão vetorizada da função:
>
> fr <- function(x){
>      y <- rep(1, length(x))
>      y[x < -3] <- 0
>      y[x >= -3 & x < 2] <- 3 * x[x >= -3 & x < 2]
>      y
> }
>



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