Petr Pikal
2005-Aug-24 11:25 UTC
[R] (Fwd) Re: priority of operators in the FOR ( ) statement
Hi On 23 Aug 2005 at 12:03, Ravi.Vishnu at outokumpu.com wrote:> Dear All, > I spent an entire evening in debugging a small, fairly simpleprogram> in R - without success. It was my Guru in Bayesian Analysis,Thomas> Fridtjof, who was able to diagonose the problem. He said that ittook> a long time for him also to locate the problem. This program > illustrates in some ways the shortcomings of the error messagesthat R <snip>>***************************************************** *****************> ***' # Bayesian Data Analysis ## > source("M:/programming/Rfolder/Assignments/fortest.txt") > > # #Remove all objects from the workspace > rm(list=ls()) > # #We will also try to note the time that the program takes > # #We will start the clock at starttime > starttime <- proc.time()[3]; >> my.function<-function(x) { > s2<-sqrt(2); > if ((x>=0) & (x<s2)) return(x/2) > else > if ((x>=s2) & (x<1+s2)) return(0.2) > else > if ((x>=1+s2) & (x<1.5+s2)) return(0.6) > else > if ((x>1.5+s2) | (x<0)) return(0) > }I also wonder if this function computes what is intended maybe this vec<-c(0,sqrt(2),sqrt(2)+1,sqrt(2)+1.5) myfun<-function(x,vec) { y<-x/2 y0<-c(0,1,.2,.6,0)[findInterval(x,vec)+1] pos<-which(y0%in%1) y0[pos]<-y[pos] y0 } vec<-c(0,sqrt(2),sqrt(2)+1,sqrt(2)+1.5)> x<-rnorm(1000000) > system.time(my1<-myfun(x,vec))[1] 1.62 0.05 1.67 NA NA>will do it more efficiently. HTH Petr> > alphayx<-function(y,x) { > fy<-my.function(y) > fx<-my.function(x) > fyx<-fy/fx > # to account for 0/0 division > if (is.na(fyx)) fyx<-0 > #fyx<-ifelse(is.na(fyx),0,fyx); > alpha<-min(1,fyx) > return(alpha) > } > > sigma<-0.5; > #nr is the number of iterations > nr<-20 > x<-numeric(nr); > x[1]<-1; > t<-1:nr; > > for (i in 1:nr-1) { > xi<-x[i]; > yi<-rnorm(1,mean=xi,sd=sigma); > ui<-runif(1,0,1); > ualphai<-alphayx(yi,xi); > xn<-ifelse(ui<=ualphai,yi,xi); > x[i+1]<-xn; > } > > plot(t,x,type="p") > > endtime<-proc.time()[3]; > elapsedTime<-endtime-starttime; > cat("Elapsed time is", elapsedTime, "seconds", "\n") >*****************************************************> ______________________________________________ > R-help at 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.htmlPetr Pikal petr.pikal at precheza.cz