首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理列表对象

处理列表对象
EN

Stack Overflow用户
提问于 2016-03-15 21:46:00
回答 3查看 205关注 0票数 4

我在R中有一个list对象,它包含更多的列表,每个列表包含三个向量。生成三个矩阵的最快方法是什么?首先是第一个矩阵,第二个矩阵是行,第二个矩阵是行,第三个矩阵是第三个矩阵。例如,考虑到:

代码语言:javascript
复制
metalist <- list(list(c(1,1),c(11,11),c("a","a")),
                 list(c(2,2),c(22,22),c("b","b")),
                 list(c(3,3),c(33,33),c("c","c")))

我想介绍三个矩阵(或data.frames),第一个矩阵包括:

代码语言:javascript
复制
1 1

2 2

3 3

第二部分由

代码语言:javascript
复制
11 11

22 22

33 33

第三部分由

代码语言:javascript
复制
a a

b b

c c

在现实中,金本位有50,000个列表对象,提取向量元素并逐步组合矩阵的for循环要花费很长时间,所以我会寻找更快的方法。我猜可能有一些聪明的使用unlist(),但我不知道它。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-03-15 21:54:56

以下将创建一个由三个矩阵组成的列表:

代码语言:javascript
复制
my_outcome <- list()
for (i in 1:3)
{
    my_outcome[[i]] <- t(as.data.frame(lapply(metalist, `[[`, i)))
}

它确实使用了一个循环,但是只使用矩阵的数量,所以在您的情况下,它应该可以工作。

票数 0
EN

Stack Overflow用户

发布于 2016-03-15 23:56:57

do.call(Map,c(f=___,...))模式是一个有用的工具箱中的模式。在空白的"transposes“结构中使用list,使用rbind将生成所需的矩阵:

代码语言:javascript
复制
do.call(Map,c(f=rbind,metalist))

[[1]]
     [,1] [,2]
[1,]    1    1
[2,]    2    2
[3,]    3    3

[[2]]
     [,1] [,2]
[1,]   11   11
[2,]   22   22
[3,]   33   33

[[3]]
     [,1] [,2]
[1,] "a"  "a" 
[2,] "b"  "b" 
[3,] "c"  "c" 
票数 1
EN

Stack Overflow用户

发布于 2016-03-15 23:40:29

如果您想完全忽略for循环,下面的工作也完成了:

代码语言:javascript
复制
lapply(1:3, function(y) {
do.call(rbind,lapply(metalist, function(x) x[[y]]))
})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36022837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档