将矩阵转换为列表

and*_*ewj 9 r list matrix

假设我有一个矩阵foo如下:

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

> foo
     [,1] [,2]
[1,]    1   15
[2,]    2   16
[3,]    3   17
Run Code Online (Sandbox Code Playgroud)

我想把它变成一个看起来像的列表

[[1]]
[1]  1 15

[[2]]
[1]  2 16

[[3]]
[1]  3 17
Run Code Online (Sandbox Code Playgroud)

你可以这样做:

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]))),它会在列表中返回一个列表,我希望避免这样做.

Sha*_*ane 17

这是一个更清洁的解决方案:

as.list(data.frame(t(foo)))
Run Code Online (Sandbox Code Playgroud)

这利用了这样一个事实:数据帧实际上只是一个等长矢量列表(而矩阵实际上是一个用列和行显示的矢量......你可以通过调用foo [5]来看到这一点,例如).

您也可以这样做,虽然它没有太大的改进:

lapply(1:nrow(foo), function(i) foo[i,])
Run Code Online (Sandbox Code Playgroud)