[R] For each element in vector do...
    Barry Rowlingson 
    B.Rowlingson at lancaster.ac.uk
       
    Tue Jan 17 15:49:24 CET 2006
    
    
  
Andrej Kastrin wrote:
> vector A: 0 1 2 3 0 4 5
> vector B: 0 2 3 4 0 5 6
> 
> What's the right way to do this. I still have some problems with for and 
> if statements...
>
  ?ifelse perhaps...
  > A
  [1] 0 1 2 3 0 4 5
  > B=ifelse(A>0,A+1,0)
  > B
  [1] 0 2 3 4 0 5 6
  does a sort of element-wise if-else thing. However it evaluates A+1 
for all elements. If you have something like:
  B = ifelse(A>0, slowFunction(A), 0)
  and not very many zeroes in A, you'll be doing a lot of slowFunction() 
work for nothing. In which case:
  B = numeric(length(A))
  B[A>0] = slowFunction(A[A>0])
  will only pass the necessary values of B to slowFunction() and put 
them into the right parts of B. B is initially all zeroes.
  It is left as an exercise to work out the better alternative to:
  ifelse(A>0, slowFunction(A), otherSlowFunction(A))
Barry
    
    
More information about the R-help
mailing list