list - 如何从名称与值配对的列表构建矩阵

标签 list r matrix

我有如下列表:

> l <- list(a=c("a1","a2"), b=c("b1","b2"), c="c1")
> l
$a
[1] "a1" "a2"

$b
[1] "b1" "b2"

$c
[1] "c1"

我想将它转换回矩阵,以便每个值都与相应的名称配对。在此示例中,预期结果是:

     [,1] [,2]
[1,] "a"  "a1"
[2,] "a"  "a2"
[3,] "b"  "b1"
[4,] "b"  "b2"
[5,] "c"  "c1"

实现该目标的最有效方法是什么?

最佳答案

不知道最有效,但使用你的列表:

l <- list(a=c("a1","a2"), b=c("b1","b2"), c="c1")

我们可以使用sapply()获取每个组件的长度

lens <- sapply(l, length)

我们只是重复 l lens 的名称并取消列出 l - 这里在一行中完成:

cbind(rep(names(l), times = sapply(l, length)), unlist(l))

它给出了所需的输出:

R> cbind(rep(names(l), times = sapply(l, length)), unlist(l))
   [,1] [,2]
a1 "a"  "a1"
a2 "a"  "a2"
b1 "b"  "b1"
b2 "b"  "b2"
c  "c"  "c1"

关于list - 如何从名称与值配对的列表构建矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6281738/

相关文章:

r - 向量化更改矩阵列的 for 循环

Python逐行检查列表

r - 如何在 switch 语句中将向量作为参数传递

python - 将 QStringList (PyQt) 转换为普通的 python 列表

c# - FindAll 搜索问题

R:将多个不同长度列表中的项目相加?

javascript - 使用shiny DT包中的选择扩展附带的全选按钮仅选择过滤的行

r - 我如何使用带有离散轴值的 geom_rect

c - 遍历矩阵的相邻对角线

arrays - 在 Julia 的循环中使用 vcat() 或 hcat() 构造矩阵的更好算法?