假设我有一个矩阵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])))
,它会在列表中返回一个列表,我希望避免这样做。
答案 0 :(得分:16)
这是一个更清洁的解决方案:
as.list(data.frame(t(foo)))
这利用了这样一个事实:数据帧实际上只是一个等长矢量列表(而矩阵实际上是一个用列和行显示的矢量......你可以通过调用foo来看到这个[5] ,例如)。
你也可以这样做,虽然没有太大改善:
lapply(1:nrow(foo), function(i) foo[i,])
答案 1 :(得分:6)
library(plyr)
alply(foo, 1)