преобразование матрицы в список - PullRequest
9 голосов
/ 18 марта 2010

Предположим, у меня есть матрица 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]))), он вернет список в списке, который я надеюсь избежать.

Ответы [ 2 ]

16 голосов
/ 18 марта 2010

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

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

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

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

lapply(1:nrow(foo), function(i) foo[i,])
6 голосов
/ 18 марта 2010
library(plyr)
alply(foo, 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...