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

问题描述:

假设我有一个独特元素的R向量,如x <- c(1,2,3,4,5)如何获得R中所有可能的向量分区列表?

有没有函数给我一个这个向量的所有可能分区的列表x?我想每个分区都是一个向量列表,其中x中的每个元素都属于这些向量之一。我希望将所有可能的分区分成任意数量的任意大小的集合。

(我觉得这样的分区的数量是一样的东西2^n * n!,其中n是独特的元素的数量。我可能不会使用此功能上向量超过4种独特的元素。)

+0

你的估计似乎太大。调用K分区的数量。很显然,K(1)= 1且K(2)= 2。现在有关系:对于N> 2,K(N)= 1 + N *(K(N-1))。也就是说,考虑所有元素的集合,然后每个集合,删除一个特定元素。这也导致构建分区的算法。 –

+0

对于N> 1,K(N)的值似乎取决于分区的顺序和分区内元素的顺序。你会提供N = 2和N = 3的预期结果吗? – BenBarnes

这里有一个解决方案,将让你的分区的完整列表,其中每一个被表示为载体的列表。由于列表列表在打印到屏幕时非常难看,我还向您展示了如何获得更加漂亮的打印对象。

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()在同一封装更紧凑的方式来表示相同的一组分区。

+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)) 
}