From: Ted Harding <Ted.Harding_at_nessie.mcc.ac.uk>

Date: Wed 07 Dec 2005 - 06:02:26 EST

# 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) }

# return the results

list(X1=X[ix1],X2=X[ix2],X3=X[ix3],ix1=ix1,ix2=ix2,ix3=ix3) }

E-Mail: (Ted Harding) <Ted.Harding@nessie.mcc.ac.uk> Fax-to-email: +44 (0)870 094 0861

https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html Received on Wed Dec 07 06:54:55 2005

Date: Wed 07 Dec 2005 - 06:02:26 EST

On 06-Dec-05 Martin Maechler wrote:

*>
*

> [But really, I'm more concerned and quite bit disappointed by

*> the diehard ";" lovers]
**>
**> Martin Maechler
*

Basically, this is done to protect me from myself (so in fact is quite a strong reason).

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@nessie.mcc.ac.uk> Fax-to-email: +44 (0)870 094 0861

Date: 06-Dec-05 Time: 19:02:23 ------------------------------ XFMail ------------------------------ ______________________________________________R-help@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 Received on Wed Dec 07 06:54:55 2005

*
This archive was generated by hypermail 2.1.8
: Fri 03 Mar 2006 - 03:41:30 EST
*