【发布时间】:2018-06-19 22:26:33
【问题描述】:
假设在 R 中的一个示例,我们在同一个函数中使用 lapply 函数来创建一个一级列表:
lapply(1:5, function(x)
{
r <- sample(4,1)
i<-lapply(1:r, function (y)
{
matrix(rep(1*x*y,3))
})
i
})
给定的结果是一个像这样的两级列表(list of lists):
[[1]]
[[1]][[1]]
[,1]
[1,] 1
[2,] 1
[3,] 1
[[2]]
[[2]][[1]]
[,1]
[1,] 2
[2,] 2
[3,] 2
[[2]][[2]]
[,1]
[1,] 4
[2,] 4
[3,] 4
[[2]][[3]]
[,1]
[1,] 6
[2,] 6
[3,] 6
[[2]][[4]]
[,1]
[1,] 8
[2,] 8
[3,] 8
[[3]]
[[3]][[1]]
[,1]
[1,] 3
[2,] 3
[3,] 3
[[3]][[2]]
[,1]
[1,] 6
[2,] 6
[3,] 6
# ...
同时保留lapply 函数(或类似的函数)和矩阵具有相同的维度,我们如何得到一个单级列表?
[[1]]
[,1]
[1,] 1
[2,] 1
[3,] 1
[[2]]
[,1]
[1,] 2
[2,] 2
[3,] 2
[[3]]
[,1]
[1,] 4
[2,] 4
[3,] 4
# ...
【问题讨论】:
-
lapply总是返回一个list。 (这就是名称中的 l 所代表的含义。)使用sapply代替 simplify。 -
如果
j是你的代码返回的对象,你可以试试unlist(j,recursive=FALSE)。 -
@Gregor,您的建议不要保留相同维度的矩阵。
标签: r list matrix lapply nested-lists