将矩阵转换为列表

12

假设我有一个矩阵叫做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
你可以按照以下步骤进行操作: 我对一种不那么复杂的替代方法感兴趣。请注意,如果只执行 apply(foo, 1, function(x) list(c(x[1], x[2]))),它会返回一个嵌套列表,我希望避免这种情况。

请参考以下问题的更多答案:https://dev59.com/WGw15IYBdhLWcg3wG4EJ - Maël
3个回答

20
这里有一个更简洁的解决方案:
as.list(data.frame(t(foo)))

这利用了数据框实际上只是相同长度向量的列表(而矩阵实际上是一个带有列和行显示的向量...您可以通过调用foo [5]来查看此内容)。

您也可以这样做,尽管它并没有太大改进:

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

你的 as.list() 方法非常完美。而且比我的方法快得多(0.847秒对2.45秒)。 - andrewj

6
library(plyr)
alply(foo, 1)

有没有使用 dplyr 的解决方案? - Julien

1
你可以使用asplit将矩阵拆分成列表。
asplit(foo, 1)
#[[1]]
#[1]  1 15
#
#[[2]]
#[1]  2 16
#
#[[3]]
#[1]  3 17

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接