Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to insert elements into a vector?

Tags:

r

I have a logical vector, for which I wish to insert new elements at particular indexes. I've come up with a clumsy solution below, but is there a neater way?

probes <- rep(TRUE, 15) ind <- c(5, 10) probes.2 <- logical(length(probes)+length(ind)) probes.ind <- ind + 1:length(ind) probes.original <- (1:length(probes.2))[-probes.ind] probes.2[probes.ind] <- FALSE probes.2[probes.original] <- probes  print(probes) 

gives

[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE 

and

print(probes.2) 

gives

[1]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE [13]  TRUE  TRUE  TRUE  TRUE  TRUE 

So it works but is ugly looking - any suggestions?

like image 595
Aaron Statham Avatar asked Sep 29 '09 17:09

Aaron Statham


People also ask

How do you add elements to a vector?

To add elements to vector, you can use push_back() function. push_back() function adds the element at the end of this vector. Thus, it increases the size of vector by one.

How do you add an element to an array in vector?

Insertion: Insertion in array of vectors is done using push_back() function. Above pseudo-code inserts element 35 at every index of vector <int> A[n]. Traversal: Traversal in an array of vectors is perform using iterators.


1 Answers

These are all very creative approaches. I think working with indexes is definitely the way to go (Marek's solution is very nice).

I would just mention that there is a function to do roughly that: append().

probes <- rep(TRUE, 15) probes <- append(probes, FALSE, after=5) probes <- append(probes, FALSE, after=11) 

Or you could do this recursively with your indexes (you need to grow the "after" value on each iteration):

probes <- rep(TRUE, 15) ind <- c(5, 10) for(i in 0:(length(ind)-1))      probes <- append(probes, FALSE, after=(ind[i+1]+i)) 

Incidentally, this question was also previously asked on R-Help. As Barry says:

"Actually I'd say there were no ways of doing this, since I dont think you can actually insert into a vector - you have to create a new vector that produces the illusion of insertion!"

like image 82
Shane Avatar answered Sep 28 '22 07:09

Shane