[R] Timer on a function
William Dunlap
wdunlap at tibco.com
Fri Mar 16 15:54:56 CET 2012
> From: Prof Brian Ripley [mailto:ripley at stats.ox.ac.uk]
> Using setTimeLimit(transient = TRUE) is slightly simpler here.
Brian,
I thought I should have been able to use transient=TRUE instead of the
on.exit(setTimeLimit()) but that gave me an unwanted error report after
the top-level expression finished (if there was no timeout). E.g.,
> to <- function(expr, ...) {
+ setTimeLimit(..., transient=TRUE)
+ expr
+ }
> f <- function(n) sum(sapply(seq_len(n), function(i)1/i)) - log(n)
> to(f(1e7), elapsed=1)
Error in FUN(1:10000000[[371022L]], ...) : reached elapsed time limit
> to(f(1e2), elapsed=1)
[1] 0.5822073
Error: reached elapsed time limit
> >
>
> sessionInfo()
R version 2.14.2 (2012-02-29)
Platform: x86_64-pc-mingw32/x64 (64-bit)
locale:
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C
[5] LC_TIME=English_United States.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
(On a new 64-bit Windows 7 PC)
Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com
> -----Original Message-----
> From: Prof Brian Ripley [mailto:ripley at stats.ox.ac.uk]
> Sent: Friday, March 16, 2012 4:28 AM
> To: Bert Gunter
> Cc: William Dunlap; r-help at r-project.org; Ramiro Barrantes
> Subject: Re: [R] Timer on a function
>
> On Thu, 15 Mar 2012, Bert Gunter wrote:
>
> > Bill et. al:
> >
> > 1. This is new to me. Thanks.
> >
> > 2. As I read the man page, this is not guaranteed to work if the model
> > fitting function does not contain sufficient interrupts. Is that
> > correct?
>
> Yes. If someone wrote a model fitting package in Fortran with no
> callbacks then it is not interruptible, including not by timers. In
> that case all you can do is to kill the R session.
>
> The author of setTimeLimit()
>
> >
> > -- Bert
> >
> > On Thu, Mar 15, 2012 at 4:14 PM, William Dunlap <wdunlap at tibco.com> wrote:
> >> There is a setTimeLimit function in base. It could be encapsulated into
> >> the following to limit the time spent on an expression:
> >>
> >> timeOut <- function (expr, ...) {
> >> on.exit(setTimeLimit())
> >> setTimeLimit(...)
> >> expr
> >> }
>
> Using setTimeLimit(transient = TRUE) is slightly simpler here.
>
> >> E.g., with the following slow way to compute Euler's phi
> >> f <- function(n) sum(sapply(seq_len(n), function(i)1/i)) - log(n)
> >> I get
> >> > timeOut(f(1e5), elapsed=1)
> >> [1] 0.5772207
> >> > timeOut(f(1e6), elapsed=1)
> >> Error in FUN(1:1000000[[711624L]], ...) : reached elapsed time limit
> >> Use try() or tryCatch() to check for the error. E.g.,
> >> > sapply(1:7, function(n)tryCatch(timeOut(f(10^n), elapsed=1), error=function(e)-1))
> >> [1] 0.6263832 0.5822073 0.5777156 0.5772657 0.5772207 -1.0000000 -1.0000000
> >> You could look at 'e' in the error handler to see if it is a time out problem.
> >>
> >> Bill Dunlap
> >> Spotfire, TIBCO Software
> >> wdunlap tibco.com
> >>
> >>> -----Original Message-----
> >>> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On
> Behalf
> >>> Of Bert Gunter
> >>> Sent: Thursday, March 15, 2012 3:05 PM
> >>> To: Ramiro Barrantes
> >>> Cc: r-help at r-project.org
> >>> Subject: Re: [R] Timer on a function
> >>>
> >>> On Thu, Mar 15, 2012 at 2:24 PM, Ramiro Barrantes
> >>> <ramiro at precisionbioassay.com> wrote:
> >>>> Hello,
> >>>>
> >>>> I have a program that consists of a loop fitting a function over many
> >>> models. Sometimes the fitting on a particular model takes minutes to converge. Is
> there
> >>> a way that I can limit the amount of time that R spends on a given model:
> >>>
> >>> AFAIK, no -- this is an OS level issue.
> >>>
> >>> Of course, most iterative fitting procedures have controls for the
> >>> number of iterations, convergence criteria, etc. , but there is no
> >>> awareness of timing except when the OS is interrogated, e.g. by
> >>> ?proc.time or ?system.time . Such calls would have to be built into
> >>> the fitting function or OS level services would have to be invoked to
> >>> run the R process with timing limitations built in. See e.g. ?Rscript
> >>> for one possible approach.
> >>>
> >>> Corrections or clever tricks to get around these perceived limitations
> >>> welcomed, of course.
> >>>
> >>> -- Bert
> >>>
> >>> Cheers,
> >>> Bert
> >>>>
> >>>> say if my line is:
> >>>>
> >>>> fittingFunction( func, model.1)
> >>>>
> >>>> can I have some function:
> >>>>
> >>>> stopIfUnderTime( fittingFunction( func, model.1) , 5 )
> >>>>
> >>>> where stopIfUnderTime will return the result if it finishes under 5 seconds, or NA
> >>> otherwise.
> >>>>
> >>>> Is there anything like this? (just looked through the web but did not find anything)
> >>>>
> >>>> Thanks,
> >>>> Ramiro
> >>>>
> >>>>
> >>>>
> >>>> [[alternative HTML version deleted]]
> >>>>
> >>>> ______________________________________________
> >>>> R-help at 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.
> >>>
> >>>
> >>>
> >>> --
> >>>
> >>> Bert Gunter
> >>> Genentech Nonclinical Biostatistics
> >>>
> >>> Internal Contact Info:
> >>> Phone: 467-7374
> >>> Website:
> >>> http://pharmadevelopment.roche.com/index/pdb/pdb-functional-groups/pdb-
> >>> biostatistics/pdb-ncb-home.htm
> >>>
> >>> ______________________________________________
> >>> R-help at 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.
> >
> >
> >
> > --
> >
> > Bert Gunter
> > Genentech Nonclinical Biostatistics
> >
> > Internal Contact Info:
> > Phone: 467-7374
> > Website:
> > http://pharmadevelopment.roche.com/index/pdb/pdb-functional-groups/pdb-
> biostatistics/pdb-ncb-home.htm
> >
> > ______________________________________________
> > R-help at 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.
> >
>
> --
> Brian D. Ripley, ripley at stats.ox.ac.uk
> Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/
> University of Oxford, Tel: +44 1865 272861 (self)
> 1 South Parks Road, +44 1865 272866 (PA)
> Oxford OX1 3TG, UK Fax: +44 1865 272595
More information about the R-help
mailing list