[R] inserting elements in a list
Thomas Lumley
tlumley at u.washington.edu
Tue Feb 18 16:49:03 CET 2003
On Tue, 18 Feb 2003 j+rhelp at howard.fm wrote:
> On 17 Feb 2003 20:11:11 +0100, "Peter Dalgaard BSA"
> <p.dalgaard at biostat.ku.dk> said:
> > Thomas Lumley <tlumley at u.washington.edu> 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.
>
The code does work, but you have to use all of it, not just that line.
The *previous* line does the shifting.
-thomas
More information about the R-help
mailing list