我有一个由七个数字组成的池。我想生成所有长度为 7 的向量:
- 两个第一个元素是从 7 个数字的池中提取的。
- 从剩下的 5 个数字中抽取两个下一个元素。
- 从剩下的 3 个数字中抽取三个最终元素。
这种方式可以用向量 c(2,2,3) 来描述。
For example:
sample <- c(8.93,9.11,9.12,9.05,8.87,8.95,9.02)
structure <- c(2,2,3)
我知道有 7C2*5C2*3C3 = 210 个这样的向量。更清楚地说,我不需要在每组元素内进行排列,例如,两个向量对我c(8.93,9.11,9.12,9.05,8.87,8.95,9.02)来说c(9.11,8.93,9.12,9.05,8.87,8.95,9.02)是相同的,我只需要其中一个出现在 210 个向量的列表中。
这是我使用for循环所做的,combn并且setdiff. 但是,我想structure在代码中使用向量并使其更灵活,例如c(2,5)代替c(2,2,3). 有没有更简洁的解决方案来概括我的问题,apply例如函数族?
df<-data.frame()
sample <- c(8.93,9.11,9.12,9.05,8.87,8.95,9.02)
combn(sample,2) -> com1
for (i in 1:ncol(com1)){
com1[,i]
setdiff(sample,com1[,i]) -> com2
combn(com2,2) -> com3
for (j in 1:ncol(com3)){
setdiff(com2,com3[,j]) -> com4
c(com1[,i],com3[,j],com4) -> de
df <- rbind(df,de)
}
}
df