преобразование матрицы к списку

Предположим, что у меня есть матрица foo следующим образом:

foo <- cbind(c(1,2,3), c(15,16,17))

> foo
     [,1] [,2]
[1,]    1   15
[2,]    2   16
[3,]    3   17

Я хотел бы превратить его в список, который похож

[[1]]
[1]  1 15

[[2]]
[1]  2 16

[[3]]
[1]  3 17

Можно сделать это следующим образом:

lapply(apply(foo, 1, function(x) list(c(x[1], x[2]))), function(y) unlist(y))

Я интересуюсь альтернативным методом, который не является как сложным. Отметьте, если Вы просто делаете apply(foo, 1, function(x) list(c(x[1], x[2]))), это возвращает список в рамках списка, которого я надеюсь избежать.

9
задан andrewj 18 March 2010 в 15:45
поделиться

2 ответа

Вот более ясное решение:

as.list(data.frame(t(foo)))

При этом используется преимущество того факта, что фрейм данных на самом деле представляет собой просто список векторов одинаковой длины (в то время как матрица на самом деле вектор, который отображается со столбцами и строками ... вы можете увидеть это, например, вызвав foo [5]).

Вы также можете сделать это, хотя это не слишком много улучшений:

lapply(1:nrow(foo), function(i) foo[i,])
17
ответ дан 4 December 2019 в 09:12
поделиться
library(plyr)
alply(foo, 1)
6
ответ дан 4 December 2019 в 09:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: