You can do things like while ( !is.nan( r <- randomFunction(x) )) {} # r will be a non-NaN value of randomFunction(x) now or for(i in seq_len(1000)) { if (!is.nan( r <- randomFunction(x))) { break } if (i == 1000) { stop("no good values of randomFunction(x) in 1000 tries") } } to avoid infinite loops when randomFunction [almost] always produces a NaN.
You may be able to avoid some NaNs by replacing log(b^n) with n*log(b) and log(prod(x^b)) with sum(b*log(x)). That would avoid unneeded Inf values, which can lead to NaN down the line (Inf-Inf -> NaN, Inf/Inf -> NaN). Bill Dunlap TIBCO Software wdunlap tibco.com On Sun, Feb 14, 2016 at 9:22 AM, Maram SAlem <marammagdysa...@gmail.com> wrote: > Hi all, > > I'm trying to write 2 functions(as a part of a larger code) to evaluate a > certain equation. The function is : > > X= c (0.3893094 2.0962311 2.6007558 3.0761810 3.3246947 3.3917976 > 4.1981546 6.8826140 12.3128013 15.5588470) > R=c (0 1 0 0 0 1 1 1 0 1) > > alpha.update=function(X, R, alpha.curr, beta.curr=1 ,m=10, > hyp=c(3,15,6,22.5)) > > { > > o<-numeric(m) > > for (i in 1:m) { > > o[i]<- (1+R[i])*((X[i])^(beta.curr)) > > } > > sh<-sum(o) + hyp[2] + (hyp[4]* beta.curr) > > rg<-rgamma(1, shape= m+hyp[1]+hyp[3] , rate = sh ) > > return(rg) > > } > > > alpha.curr<- alpha.update(X, R, alpha.curr=0.2, beta.curr=1 ,m, hyp) > > > bettarg<- function(X, R, alpha.curr, beta.curr=1 ,m=10, > hyp=c(3,15,6,22.5)) > > { > > o<-numeric(m) > > for (i in 1:m) { > > o[i]<- (1+R[i])*((X[i])^( beta.curr)) > > } > > logbt<- log(beta.curr ^(m+hyp[3]-1)) + log(prod((X)^( beta.curr -1))) > + (-1*alpha.curr *(sum(o) + (hyp[4]* beta.curr))) > > > > bt<- exp(logbt) > > return(bt) > > } > > > The problem is that the function bettarg() sometimes produces NaN, and > this stops the evaluation of my equation, so how can I force it to ignore > the NaNs produced and repeat the evaluation again till it prroduces a > number? > > > Thanks in advance, > > > Maram Salem > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see > 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. > [[alternative HTML version deleted]] ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see 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.