2015-01-09 2 views
1

У меня есть вектор с длиной четного числа.Как преобразовать вектор в список в R?

vec = c(1,3,2,4,5,6) 

Я хочу преобразовать его в список, подобный этому, где каждые 2 последовательных числа помещаются в подкомпонент.

[[1]] 
[1] 1 3 

[[2]] 
[1] 2 4 

[[3]] 
[1] 5 6 

Должен быть простой способ сделать это. Также можно конвертировать из матрицы в список подобных, если это проще сделать.

ответ

4

Вы можете использовать split()

split(vec, (seq_along(vec)-1) %/% 2) 

Или, если вы хотите, чтобы перейти к матрице, а затем

library(magrittr) # for %>% 
matrix(vec, nrow=2) %>% split(., col(.)) 
+0

Это Awesome! Благодаря! – wen

2

раскол будет делать:

> vec = c(1,3,2,4,5,6) 
> split.size <- 2 
> split(vec, rep(seq(len=length(vec)/split.size), each=split.size)) 
$`1` 
[1] 1 3 

$`2` 
[1] 2 4 

$`3` 
[1] 5 6 
1

Использование lapply:

lapply(1:(length(vec)/2),FUN=function(x)c(vec[(x*2)-1],vec[x*2])) 

Или проходя через промежуточную матрицу (и data.frame ...):

unname(as.list(as.data.frame(matrix(vec,nrow=2))))