我怎样才能得到R中的向量的所有可能的分区列表?(How can I get a list of al

2019-06-24 13:55发布

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

有没有给我这个矢量的所有可能的分区列表的功能x ? 我想每个分区将是向量的列表,其中每个元素x所属的矢量中的一个。 我希望所有可能划分到任何数量组的任何尺寸。

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

Answer 1:

这里有一个解决方案,将让你的分区的完整列表,其中每一个被表示为载体的列表。 因为当打印到屏幕上列出的名单是很丑陋,我还展示了如何获得更精细打印的对象。

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



Answer 2:

这是否给你你在找什么,

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


文章来源: How can I get a list of all possible partitions of a vector in R?