如何获得R中矢量的所有可能分区的列表?

时间:2012-05-18 23:50:45

标签: r vector combinatorics

假设我有一个独特元素的R向量,例如x <- c(1,2,3,4,5)

是否有一个函数可以为我提供此向量x的所有可能分区的列表?我猜每个分区都是一个向量列表,其中x中的每个元素都属于一个向量。我想将所有可能的分区分成任意大小的任意数量的集合。

(我认为这些分区的数量类似于2^n * n!,其中n是唯一元素的数量。我可能不会在具有4个以上唯一元素的向量上使用此函数。 )

2 个答案:

答案 0 :(得分:8)

这是一个解决方案,它将为您提供完整的分区列表,每个分区都表示为向量列表。由于列表列表在打印到屏幕时非常难看,我还向您展示了如何获得更好的打印对象。

library(partitions)

x <- c(2,4,6)       # Substitute the vector for which you want partitions 
parts <- listParts(length(x))
out <- rapply(parts, function(ii) x[ii], how="replace")

# This step is for cosmetic purposes only. It allows you to take advantage of
# the `print.equivalence` print method when printing the object to a console 
for(i in seq_along(out)) class(out[[i]]) <- c("list", "equivalence")
out
[[1]]
[1] (2,4,6)

[[2]]
[1] (2,6)(4)

[[3]]
[1] (2,4)(6)

[[4]]
[1] (4,6)(2)

[[5]]
[1] (2)(4)(6)

另请参阅同一软件包中的setparts(),以获得更紧凑的方式来表示同一组分区。

答案 1 :(得分:0)

这是否能满足您的需求,

install.packages("gregmisc", dependencies = TRUE)
library(gregmisc)

x <- c(1,2,3,4,5)
for(i in 1:length(x)) {
print(combinations(5,i,x,repeats=TRUE))
}