Hi

why do you insist on loops. R is not C. If you want to use loops use C or 
similar programming languages. It is almost always better to apply whole 
object approach. Kind and clever people already programmed it (sometimes 
in C ).

x<-rnorm(20)
x[c(10,12,13,17)]<-NA

x
 [1] -1.12423790  0.80641765 -1.02686262  0.71894420 -0.76157153 
-0.09612362
 [7]  0.36681907  0.11164870 -1.06308689          NA -1.32903523 NA
[13]          NA  0.43308928 -0.16599726 -1.85594816          NA 
0.02117957
[19] -0.58170838  1.45417843

library(zoo)

na.locf(x)
 [1] -1.12423790  0.80641765 -1.02686262  0.71894420 -0.76157153 
-0.09612362
 [7]  0.36681907  0.11164870 -1.06308689 -1.06308689 -1.32903523 
-1.32903523
[13] -1.32903523  0.43308928 -0.16599726 -1.85594816 -1.85594816 
0.02117957
[19] -0.58170838  1.45417843

Would be always quicker then for cycle with condition checked in each 
step.

There was an article in R News and P.Burns R inferno is also worth to look 
at if you are interested in loop performance.

If you want to see where the time is spent use Rprof

Regards
Petr
 

siddharth.gar...@gmail.com napsal dne 28.07.2010 15:20:11:

> Thanks for the reply Petr. I have solved this problem using sapply but 
what I 
> am trying to understand here is, why this code is slow. 
> 
> One of the possible reasons could be when I use the assignment operator 
ie
>    D$x[i]=D$x[i-1]
> It actually makes a new copy of D$x with the modified value.
> 
> Another reason could be indexed lookups might not be very fast in R.
> 
> Regards
> Siddharth
> 
> 
> 
> ------Original Message------
> From: Petr PIKAL
> To: siddharth.gar...@gmail.com
> Cc: r-help@r-project.org
> Subject: Odp: [R] Data frame modification
> Sent: Jul 28, 2010 6:15 PM
> 
> Hi
> 
> r-help-boun...@r-project.org napsal dne 28.07.2010 11:30:48:
> 
> > Hi
> > 
> > I am trying to modify a data frame D with lists x and y in such a way 
> that if 
> > a value in x==0 then it should replace that value with the last not 
zero 
> valuein x. I.e.
> > 
> > for loop over i{
> > if(D$x[i]==0)
> >      D$x[i]=D$x[i-1]
> > }
> > 
> > The data frame is quite large in size ~ 43000 rows. This operation is 
> taking a
> > large amount of time. Can someone please suggest me what might be the 
> reason.
> 
> Bad programming practice? I would suggest to use zoo package and na.locf 

> function after changing all zero values to NA.
> 
> Regards
> Petr
> 
> > 
> > Thanks
> > Regards
> > Siddharth
> > Sent on my BlackBerry® from Vodafone
> > ______________________________________________
> > R-help@r-project.org mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-help
> > PLEASE do read the posting guide 
> http://www.R-project.org/posting-guide.html
> > and provide commented, minimal, self-contained, reproducible code.
> 
> 
> 
> Sent on my BlackBerry® from Vodafone
______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to