On 17 Feb 2003 20:11:11 +0100, "Peter Dalgaard BSA" <[EMAIL PROTECTED]> said: > Thomas Lumley <[EMAIL PROTECTED]> writes: > > > N<-length(a) > > threes<- a==3 > > offset<- c(0,cumsum(threes)[-N]) > > a[offset+(1:N)]<-a > > a[which(threes)+offset[threes]+1]<-7 > > > > for a more vectorised version. Equally ugly, but understanding > > these two solutions is probably educational. > > > > Adding elements in the middle is something vectors are not good at, in > > contrast to (pair-based or linked) lists.
Indeed they're not - and the code above fails to do this insertion: > a[which(threes)+offset[threes]+1]<-7 > a [1] 1 2 3 7 6 3 NA 7 The problem is that it is placing the '7's in the correct place, but is not shifting the right-hand side of the list across to make room. > 2) Show that the index in the last line is the same as > > which(threes)+seq(length=sum(threes)) That's a neat way to find the right spots to place the '7's - wherever the '3's were before, plus one spot for each '3' that we've seen so far... I'm not sure how to insert into the vector rather than replace though - a quick browse through the list archives didn't turn up any quick solutions (other than the types of loops suggested in earlier answers in this thread). -- Jeremy Howard [EMAIL PROTECTED] ______________________________________________ [EMAIL PROTECTED] mailing list http://www.stat.math.ethz.ch/mailman/listinfo/r-help
