Well, this has been an interesting thread. I guess my own perspective is warped, having never been a C programmer. My native languages are FORTRAN, python, and R, all of which accept (or demand) a linefeed as a terminator, rather than a semicolon, and two of which are very particular about whitespace. Accepting for a moment Ted's argument about wanting to compact his code, the problem as I understand it is that ";" is a statement separator, not a statement terminator, so that Ted really does need all those ";" in between his statements on a single line, but that the last one implies a NULL statement on every line. Given that the ";" facilitates compacting lines in vi (or vim), how about when the code is compacted you try 1,$s/;$// which will remove all the final trailing ";" leaving the other necessary ";" separators. Dave R.
(Ted Harding) wrote:
On 06-Dec-05 Martin Maechler wrote:
[But really, I'm more concerned and quite bit disappointed by the diehard ";" lovers] Martin Maechler
Well, while not die-hard, I will put in my own little reason
for often using ";" at the end of lines which don't need them.
Basically, this is done to protect me from myself (so in fact
is quite a strong reason).
I tend to develop extended R code in a "side-window", using
a text editor (vim) in that window, and cut&pasting the
chunks of R code from that window into the R window.
This usually means that I have a lot of short lines,
since it is easier when developing code to work with the
commands one per line, as they are easier to find and
less likely to be "corrected" erroneously.
Finally, when when I am content that the code does the job
I then put several short lines into one longer one.
For example (a function to do with sampling with probability
proportional to weights); first, as written line-by-line:
myfunction <- function(X,n1,n2,n3,WTS){
N1<-n1;
N2<-n1+n2;
N3<-n1+n2+n3;
# first selection
pii<-WTS/sum(WTS);
alpha<-N2;
Pi<-alpha*pii;
r<-runif(N3);
ix<-sort(which(r<=Pi));
# second selection
ix0<-(1:N3);
ix3<-ix0[-ix];
ix20<-ix0[ix];
W<-WTS[ix];
pii<-W/sum(W);
Pi<-N1*pii;
r<-runif(length(Pi));
ix10<-sort(which(r<=Pi));
ix1<-ix20[ix10];
ix2<-ix20[-ix10];
# return the results
list(X1=X[ix1],X2=X[ix2],X3=X[ix3],ix1=ix1,ix2=ix2,ix3=ix3)
}
Having got that function right, with 'vim' in command mode
successive lines are readily brought up to the current line
by simply pressing "J", which is very fast. This, in the
above case, then results in
MARselect<-function(X,n1,n2,n3,WTS){
N1<-n1; N2<-n1+n2; N3<-n1+n2+n3;
# first selection
pii<-WTS/sum(WTS); alpha<-N2; Pi<-alpha*pii;
r<-runif(N3); ix<-sort(which(r<=Pi));
# second selection
ix0<-(1:N3); ix3<-ix0[-ix]; ix20<-ix0[ix];
W<-WTS[ix]; pii<-W/sum(W); Pi<-N1*pii;
r<-runif(length(Pi)); ix10<-sort(which(r<=Pi));
ix1<-ix20[ix10]; ix2<-ix20[-ix10];
# return the results
list(X1=X[ix1],X2=X[ix2],X3=X[ix3],ix1=ix1,ix2=ix2,ix3=ix3)
}
The greater readability of the first relative to the second is
obvious. The compactness of the second relative to the first
is evident. Obtaining the second from the first by repeated "J"
is very quick.
BUT -- if I had not put the ";" at the ends of the lines in the
string-out version (which is easy to do as you type in the line
in the first place), then it would be much more trouble to get
the second version, and very easy to get it wrong!
Also, being long used to programming in C and octave/matlab,
putting ";" at the end of a command is an easy reflex, and of
course does no harm at all to an R command.
Not that I'm trying to encourage others to do the same as I
do -- as I said, it's a self-protective habit -- but equally
if people (e.g. me) may find it useful I don't think it should
be discouraged either -- especially on "aesthetic" grounds!
Just my little bit ...
Best wishes,
Ted.
--------------------------------------------------------------------
E-Mail: (Ted Harding) <Ted.Harding at nessie.mcc.ac.uk>
Fax-to-email: +44 (0)870 094 0861
Date: 06-Dec-05 Time: 19:02:23
------------------------------ XFMail ------------------------------
______________________________________________ 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.html
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ David W. Roberts office 406-994-4548 Professor and Head FAX 406-994-3190 Department of Ecology email droberts at montana.edu Montana State University Bozeman, MT 59717-3460