vector - R and rbind making entries without the same length be zero -


say have 2 vectors v1 , v2 , want call rbind(v1, v2). however, supposed length(v1) > length(v2). documentation have read shorter vector recycled. here example of "recycling":

> v1 <- c(1, 2, 3, 4, 8, 5, 3, 11) > v2 <- c(9, 5, 2) > rbind(v1, v2)    [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] v1    1    2    3    4    8    5    3   11 v2    9    5    2    9    5    2    9    5 
  1. is there straightforward way can stop v2 being recycled , instead make remaining entries 0?
  2. is there better way build vectors , matrices?

all appreciated!

use following:

rbind(v1, v2=v2[seq(v1)])     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] v1    1    2    3    4    8    5    3   11 v2    9    5    2   na   na   na   na   na 

why works: indexing vector value larger length returns value of na @ index point.

 #eg:  {1:3}[c(3,5,1)] #[1]  3 na  1 

thus, if index shorter 1 indecies of longer one, willl of values of shorter 1 plus series of na's


a generalization:

v <- list(v1, v2) n <- max(sapply(v, length)) do.call(rbind, lapply(v, `[`, seq_len(n))) 

Comments

Popular posts from this blog

jquery - How can I dynamically add a browser tab? -

node.js - Getting the socket id,user id pair of a logged in user(s) -

keyboard - C++ GetAsyncKeyState alternative -