2010-03-18 58 views
8

假设我有一个矩阵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))

我感兴趣的一个altern这种方法并不复杂。请注意,如果你只是做apply(foo, 1, function(x) list(c(x[1], x[2]))),它会返回一个列表,我希望避免。

回答

14

这里的一个清洁的解决方案:

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

这需要的事实,即一个数据帧仅仅是一个相等的长度矢量的列表(而矩阵是真的显示具有列和行的载体的优势...例如,你可以通过调用foo [5]来看到这一点)。

你也可以做到这一点,虽然不是多大的改善:

lapply(1:nrow(foo), function(i) foo[i,]) 
+0

你'as.list()'方法是完美的。也比我的方法快得多(0.847秒对2.45秒)。 – andrewj

6
library(plyr) 
alply(foo, 1) 
+0

这个工作是否也适用于NxN矩阵? –