Suppose I have a function, such as the toy example below:
myFun <- function(x, max.iter = 5) {
for(i in 1:10){
result <- x + i
iter <- i
if(iter == max.iter) stop('Max reached')
}
result
}
I can of course do this:
myFun(10, max.iter = 11)
However, if I reach the maximum number of iterations before my
"algorithm" has finished (in my real application there are EM steps
for a mixed model), I actually want the function to return the value of
"result" up to that point. Currently using stop(), I would get
> myFun(10, max.iter = 4)
Error in myFun(10, max.iter = 4) : Max reached
But, in this toy case the function should return the value of "result"
up to iteration 4.
Not sure how I can adjust this.
Thanks,
Harold
[[alternative HTML version deleted]]
You could use return(), e.g.,
myFun <- function (x, max.iter = 5) {
for (i in 1:10) {
result <- x + i
iter <- i
if (iter == max.iter) {
return(result)
}
}
result
}
myFun(10, max.iter = 4)
I hope it helps.
Best,
Dimitris
On 10/11/2011 7:31 PM, Doran, Harold wrote:> Suppose I have a function, such as the toy example below:
>
> myFun<- function(x, max.iter = 5) {
> for(i in 1:10){
> result<- x + i
> iter<- i
> if(iter == max.iter) stop('Max reached')
> }
> result
> }
>
> I can of course do this:
> myFun(10, max.iter = 11)
>
> However, if I reach the maximum number of iterations before my
"algorithm" has finished (in my real application there are EM steps
for a mixed model), I actually want the function to return the value of
"result" up to that point. Currently using stop(), I would get
>
>> myFun(10, max.iter = 4)
> Error in myFun(10, max.iter = 4) : Max reached
>
> But, in this toy case the function should return the value of
"result" up to iteration 4.
>
> Not sure how I can adjust this.
>
> Thanks,
> Harold
>
>
>
> [[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.
>
--
Dimitris Rizopoulos
Assistant Professor
Department of Biostatistics
Erasmus University Medical Center
Address: PO Box 2040, 3000 CA Rotterdam, the Netherlands
Tel: +31/(0)10/7043478
Fax: +31/(0)10/7043014
Web: http://www.erasmusmc.nl/biostatistiek/
Replace "stop()" with "break" to see if that does what you want. (you may also want to include "cat()" or "warn()" to indicate the early stopping. -- Gregory (Greg) L. Snow Ph.D. Statistical Data Center Intermountain Healthcare greg.snow at imail.org 801.408.8111> -----Original Message----- > From: r-help-bounces at r-project.org [mailto:r-help-bounces at r- > project.org] On Behalf Of Doran, Harold > Sent: Tuesday, October 11, 2011 11:32 AM > To: r-help at r-project.org > Subject: [R] stop() > > Suppose I have a function, such as the toy example below: > > myFun <- function(x, max.iter = 5) { > for(i in 1:10){ > result <- x + i > iter <- i > if(iter == max.iter) stop('Max reached') > } > result > } > > I can of course do this: > myFun(10, max.iter = 11) > > However, if I reach the maximum number of iterations before my > "algorithm" has finished (in my real application there are EM steps for > a mixed model), I actually want the function to return the value of > "result" up to that point. Currently using stop(), I would get > > > myFun(10, max.iter = 4) > Error in myFun(10, max.iter = 4) : Max reached > > But, in this toy case the function should return the value of "result" > up to iteration 4. > > Not sure how I can adjust this. > > Thanks, > Harold > > > > [[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.