我有如下列表:
> 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/