我有如下清单数据:
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])})时,它没有工作,其结果如下:

我不知道为什么,你能帮我解决这个问题吗,非常感谢!
发布于 2016-02-04 17:08:53
我们可以使用gl创建分组索引,使用'a‘序列创建split,使用索引对list元素进行子集,并使用expand.grid。
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代码给出
sapply(1:(length(a)/3), function(x)
{expand.grid(a[1:3+3*x-3])}, simplify=FALSE)根据?sapply
简化:逻辑字符串或字符串;如果可能,结果应该简化为向量、矩阵或高维数组吗?对于sapply,它必须命名,而不是缩写。默认值TRUE返回向量或矩阵(如果适当的话),而如果简化=“数组”,则结果可能是“秩”的数组(=长度(dim(.)一个高于乐趣的结果(X[i])。
https://stackoverflow.com/questions/35207147
复制相似问题