-----Original Message-----
From: r-help-bounces at stat.math.ethz.ch
[mailto:r-help-bounces at stat.math.ethz.ch] On Behalf Of Patrick Burns
Sent: Tuesday, August 23, 2005 4:12 AM
To: Ravi.Vishnu at outokumpu.com
Cc: r-help at stat.math.ethz.ch
Subject: Re: [R] priority of operators in the FOR ( ) statement
The command that I think is most useful in this situation
is 'browser()'.
Even a couple decades of programming in the S language
hasn't yet solved the problem of my fingers typing code that
doesn't match what I want to happen. I quite consistently have
a
browser()
call in functions that I write to make sure that what I am assuming
is the same as what R assumes.
Patrick Burns
patrick at burns-stat.com
+44 (0)20 8525 0696
http://www.burns-stat.com
(home of S Poetry and "A Guide for the Unwilling S User")
Ravi.Vishnu at outokumpu.com wrote:
Dear All,
I spent an entire evening in debugging a small, fairly
- without success. It was my Guru in Bayesian Analysis,
who was able to diagonose the problem. He said that it took
for him also to locate the problem.
This program illustrates in some ways the shortcomings of the error
messages that R responds with. In this case, it was quite
directs attention to a location far removed the actual
Without any more introductory comments, let me directly discuss the
essential problem. I am enclosing the entire program after a brief
discussion.
The problem arises from the following statement (nr is an integer
constant) :
for ( i in 1:nr-1) {.......}
The unexpected problem (at least for me) is that R reads the above
statement as (i in (1:nr)-1) {.....}. This makes i be
which leads to an error because the for loop in R starts from 1. The
problem is easily fixed by writing the for loop as ( i in 1:(nr-1))
{.......}. This would be an easy problem to fix if R
what the problem is. Instead, it gives mystifying error
totally misleading. For example, to the program given below,
following error message (these point to commands elsewhere
:
Error in if ((x >= 0) & (x < s2)) return(x/2) else if ((x >=
missing value where TRUE/FALSE needed
I would like clarifications on the following points :
1. I am just curious to know if the priority of operators in the for
statement ( the colon before the minus operator, for example) is a
deliberate design decision. I have tested Matlab and found that it
interprets my original statement correctly without an extra
2. Faced with a similiar problem in the future, what is a
debugging in R to locate a problem. With this problem, I checked and
double checked every single statement in the program, except the for
statement because I just did not expect any problem there. I
that there is a debug package but I have not used it. Can
used to locate a problem with greater ease? Can somebody
example (for the following program, for example) of a
*************************************************************
# 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)
}
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")
*************************************************************
This message is meant for the addressee only and may contain
confidential and legally privileged information. Any unauthorised
review, use, copying, storage, disclosure or distribution of this e-
mail and any attachments is strictly prohibited. If you are not the
named recipient or have otherwise received this communication in
error, please destroy this message from your system and
the sender by e-mail. Thank you for your co-operation.
[[alternative HTML version deleted]]