我有下面的清单。
假设我要从组1中选择1个元素,从组2中选择2个元素,从组3中选择3个元素,并从组4-6中选择1个元素。如果不允许重复元素,那么获得所有不同元素组合的最像R的方式是什么?
因此,例如:(A1, B1, B2, C1, C2, C3, D1, E1, F1)
可以,但(A1, B1, B1, C1, C2, C3, D1, E1, F1)
不能吗?
itemNames <- list(group1 = c("A1", "A2", "A3", "A4", "A5", "A6"),
group2 = c("B1", "B2", "B3", "B4", "B5", "B6"),
group3 = c("C1", "C2", "C3", "C4", "C5", "C6", "C7", "C8", "C9", "C10", "C11", "C12"),
group4 = c("D1", "D2", "D3", "D4", "D5", "D6"),
group5 = c("E1", "E2", "E3", "E4"),
group6 = c("F1", "F2", "F3", "F4"))
显然,我可以使用9个嵌套的for循环来完成此操作-这很浪费。我当时玩的是融化和重塑2,但是什么也没得到。谢谢!
您可以使用Map
Reduce
功能组合。映射combn
以获得每个组的组合。然后减少一个expand.grid
不会变平的版本。
expand.grid.XY <- function(X,Y)
cbind(X[rep(1:nrow(X),nrow(Y)),], Y[rep(1:nrow(Y),each=nrow(X)),])
combos <- function(items,reps)
Reduce(expand.grid.XY, Map(function(...) t(combn(...)),items,reps))
dim(combos(itemNames,c(1,2,3,1,1,1)))
# [1] 1900800 9
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句