[R] spped up a function

PIKAL Petr petr.pikal at precheza.cz
Mon Jul 8 11:34:27 CEST 2013


Hi

It seems to me, that you basically want merge, but I can miss the point. Try post

dput(head(xact))
dput(head(GPS))

and what shall be desired result based on those 2 datasets.

Regards
Petr


> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-
> project.org] On Behalf Of Santiago Guallar
> Sent: Tuesday, July 02, 2013 7:47 PM
> To: r-help
> Subject: [R] spped up a function
> 
> Hi,
> 
> I have written a function to assign the values of a certain variable
> 'wd' from a dataset to another dataset. Both contain data from the
> same time period but differ in the length of their time intervals:
> 'GPS' has regular 10-minute intervals whereas 'xact' has irregular
> intervals. I attached simplified text versions from write.table. You
> can also get a dput of 'xact' in this address:
> http://www.megafileupload.com/en/file/431569/xact-dput.html).
> The original objects are large and the function takes almost one hour
> to finish.
> Here's the function:
> 
> fxG= function(xact, GPS){
> l <- rep( 'A', nrow(GPS) )
> v <- unique(GPS$Ring) # the process is carried out for several
> individuals identified by 'Ring'
> for(k in 1:length(v) ){
> I = v[k]
> df <- xact[xact$Ring == I,]
> for(i in 1:nrow(GPS)){
> if(GPS[i,]$Ring== I){# the code runs along the whole data.frame for
> each i; it'd save time to make it stop with the last record of each i
> instead u <- df$timepos <= GPS[i,]$timepos # fill vector l for each
> interval t from xact <= each interval from GPS (take the max if there's
> > 1 interval) l[i] <- df[max( which(u == TRUE) ),]$wd } } } return(l)}
> 
> vwd <- fxG(xact, GPS)
> 
> 
> My question is: how can I speed up (optimize) this function?
> 
> Thank you for your help



More information about the R-help mailing list