Ales Ziberna
2005-Dec-14 17:05 UTC
[R] The fastest way to select and execute a few selected functions inside a function
Dear useRs?
I have the following problem! I have a function that calls one or more
functions, depending on the input parameters. I am searching for the fastest
way to select and execute the selected functions and return their results in
a list. The number of possible functions is 10, however usually only 2 are
selected (although sometimes more, even all).
For examples, if I have function "myf" and the possible functions that
I
want to call are "mean", "max" and "sum". I have
thought of one way (myf) to
do that and am interested if there maybe exists a faster way (the speed is
very important, since this can be repeated millions of times in my
function).
myf<-function(FUN, x){
f<-list(mean=mean, max=max, sum=sum)
res<- vector( mode="list")
for(i in FUN){
res[[i]]<-f[[i]](x)
}
return(res)
}
myf(FUN=c("mean","max"),x=1:10)
In this case, it would be faster if I would compute all functions, even if I
need only one:
myf.all<-function(x){
list(mean=mean(x), max=max(x), sum=sum(x))
}
> gc();system.time(for(i in 1:10000)myf.all(1:20))
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 165659 4.5 350000 9.4 350000 9.4
Vcells 61135 0.5 786432 6.0 283043 2.2
[1] 0.90 0.00 1.08 NA NA
> gc();system.time(for(i in 1:10000)myf(FUN="mean",1:20))
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 165659 4.5 350000 9.4 350000 9.4
Vcells 61135 0.5 786432 6.0 283043 2.2
[1] 1.14 0.00 1.40 NA NA
This does (usually) not happen in my case, since most of functions I
consider are more complex.
Thanks in advance for any suggestions!
Best regards,
Ales Ziberna
Ferdinand Alimadhi
2005-Dec-15 01:35 UTC
[R] The fastest way to select and execute a few selected functions inside a function
Is this what you want?
myf<-function(FUN, x){
res<- vector( mode="list")
for(i in FUN)
res[[i]]<-do.call(i,args=list(x))
return(res)
}
> myf(FUN="mean",x=1:10)
> myf(FUN=c("mean","max"),x=1:10)
> myf(FUN=c("mean","max", "sum",
"median"),x=1:10)
Ales Ziberna wrote:
>Dear useRs?
>
>
>
>I have the following problem! I have a function that calls one or more
>functions, depending on the input parameters. I am searching for the fastest
>way to select and execute the selected functions and return their results in
>a list. The number of possible functions is 10, however usually only 2 are
>selected (although sometimes more, even all).
>
>
>
>For examples, if I have function "myf" and the possible functions
that I
>want to call are "mean", "max" and "sum". I
have thought of one way (myf) to
>do that and am interested if there maybe exists a faster way (the speed is
>very important, since this can be repeated millions of times in my
>function).
>
>
>
>
>
>myf<-function(FUN, x){
>
> f<-list(mean=mean, max=max, sum=sum)
>
> res<- vector( mode="list")
>
> for(i in FUN){
>
> res[[i]]<-f[[i]](x)
>
> }
>
> return(res)
>
>}
>
>myf(FUN=c("mean","max"),x=1:10)
>
>
>
>
>
>In this case, it would be faster if I would compute all functions, even if I
>need only one:
>
>myf.all<-function(x){
>
> list(mean=mean(x), max=max(x), sum=sum(x))
>
>}
>
>
>
>
>
>>gc();system.time(for(i in 1:10000)myf.all(1:20))
>>
>>
>
> used (Mb) gc trigger (Mb) max used (Mb)
>
>Ncells 165659 4.5 350000 9.4 350000 9.4
>
>Vcells 61135 0.5 786432 6.0 283043 2.2
>
>[1] 0.90 0.00 1.08 NA NA
>
>
>
>>gc();system.time(for(i in 1:10000)myf(FUN="mean",1:20))
>>
>>
>
> used (Mb) gc trigger (Mb) max used (Mb)
>
>Ncells 165659 4.5 350000 9.4 350000 9.4
>
>Vcells 61135 0.5 786432 6.0 283043 2.2
>
>[1] 1.14 0.00 1.40 NA NA
>
>
>
>This does (usually) not happen in my case, since most of functions I
>consider are more complex.
>
>
>
>Thanks in advance for any suggestions!
>
>
>Best regards,
>
>Ales Ziberna
>
>______________________________________________
>R-help@stat.math.ethz.ch mailing list
>https://stat.ethz.ch/mailman/listinfo/r-help
>PLEASE do read the posting guide!
http://www.R-project.org/posting-guide.html
>
>
--
Ferdinand Alimadhi
Programmer / Analyst
Harvard University
The Institute for Quantitative Social Science
(617) 496-0187
falimadhi@latte.harvard.edu
www.iq.harvard.edu
[[alternative HTML version deleted]]
Ales Ziberna
2005-Dec-16 09:36 UTC
[R] The fastest way to select and execute a few selected functions inside a function
----- Original Message -----
From: "Ales Ziberna" <aleszib at gmail.com>
To: "R-help" <r-help at stat.math.ethz.ch>
Sent: Wednesday, December 14, 2005 6:05 PM
Subject: The fastest way to select and execute a few selected functions
inside a function
Dear useRs?
I have the following problem! I have a function that calls one or more
functions, depending on the input parameters. I am searching for the fastest
way to select and execute the selected functions and return their results in
a list. The number of possible functions is 10, however usually only 2 are
selected (although sometimes more, even all).
For examples, if I have function "myf" and the possible functions that
I
want to call are "mean", "max" and "sum". I have
thought of one way (myf) to
do that and am interested if there maybe exists a faster way (the speed is
very important, since this can be repeated millions of times in my
function).
myf<-function(FUN, x){
f<-list(mean=mean, max=max, sum=sum)
res<- vector( mode="list")
for(i in FUN){
res[[i]]<-f[[i]](x)
}
return(res)
}
myf(FUN=c("mean","max"),x=1:10)
In this case, it would be faster if I would compute all functions, even if I
need only one:
myf.all<-function(x){
list(mean=mean(x), max=max(x), sum=sum(x))
}
> gc();system.time(for(i in 1:10000)myf.all(1:20))
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 165659 4.5 350000 9.4 350000 9.4
Vcells 61135 0.5 786432 6.0 283043 2.2
[1] 0.90 0.00 1.08 NA NA
> gc();system.time(for(i in 1:10000)myf(FUN="mean",1:20))
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 165659 4.5 350000 9.4 350000 9.4
Vcells 61135 0.5 786432 6.0 283043 2.2
[1] 1.14 0.00 1.40 NA NA
This does (usually) not happen in my case, since most of functions I
consider are more complex.
Thanks in advance for any suggestions!
Best regards,
Ales Ziberna