首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在列表中expand.grid特定对象以形成新列表

如何在列表中expand.grid特定对象以形成新列表
EN

Stack Overflow用户
提问于 2016-02-04 17:04:45
回答 1查看 792关注 0票数 3

我有如下清单数据:

代码语言:javascript
复制
a<-list(10,c(8,9),5,14,c(3,7),c(2,3),5,13,c(3,4),4,5,8,12,c(2,3),c(5,7))

一个

[[1]]

[1] 10

[[2]]

[1] 8 9

[3]

[1] 5

[4]

[1] 14

[5]

[1] 3 7

[6]

[1] 2 3

[7]

[1] 5

[8]

[1] 13

[9]

[1] 3 4

[10]

[1] 4

[11]

[1] 5

[12]

[1] 8

[13]

[1] 12

[14]

[1] 2 3

[15]

[1] 5 7

然后,我想在列表a中的每3个对象中使用"expand.grid“。

也就是说,分别到expand.grid 1-3、4-6、7-9、10-12、13-15,然后将这些结果组合成一个新的列表形式。

结果应该是类似于下面的外观。

我只是用最愚蠢的方法来解决这个问题:list(expand.grid(a[1:3]),expand.grid(a[4:6]),expand.grid(a[7:9]),expand.grid(a[10:12]),expand.grid(a[13:15]))

当我尝试使用"sapply":sapply(1:(length(a)/3), function(x){expand.grid(a[1:3+3*x-3])})时,它没有工作,其结果如下:

我不知道为什么,你能帮我解决这个问题吗,非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-04 17:08:53

我们可以使用gl创建分组索引,使用'a‘序列创建split,使用索引对list元素进行子集,并使用expand.grid

代码语言:javascript
复制
lapply(split(seq_along(a), as.numeric(gl(length(a), 3, length(a)))),
                         function(i) expand.grid(a[i]))

我们也可以使用sapply,但要确保使用simplify=FALSE作为选项

带有simplify=FALSE的OP代码给出

代码语言:javascript
复制
 sapply(1:(length(a)/3), function(x)
       {expand.grid(a[1:3+3*x-3])}, simplify=FALSE)

根据?sapply

简化:逻辑字符串或字符串;如果可能,结果应该简化为向量、矩阵或高维数组吗?对于sapply,它必须命名,而不是缩写。默认值TRUE返回向量或矩阵(如果适当的话),而如果简化=“数组”,则结果可能是“秩”的数组(=长度(dim(.)一个高于乐趣的结果(X[i])。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35207147

复制
相关文章

相似问题

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