On 17 Feb 2003, Peter Dalgaard BSA wrote:
>
> > On Mon, Feb 17, 2003 at 02:01:47PM +0100, Agustin Lobo wrote:
> > ...
> > > Let's say we have a vector:
> > > > a
> > > [1] "1" "2" "3" "5" "6" "3"
> > >
> > > and we want to insert a "7" after
> > > any given "3", i.e., we want vector a
> > > to become:
> > >
> > > [1] "1" "2" "3" "7" "5" "6" "3" "7"
> > ...
> >
> >
> This should work:
>
> unlist(lapply(a,function(x)if(x==3)c(3,7)else x))
>
> Whether it is cleaner is debatable.
>
Or
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.
-thomas
______________________________________________
[EMAIL PROTECTED] mailing list
http://www.stat.math.ethz.ch/mailman/listinfo/r-help