假设我有独特的元素如的R矢量x <- c(1,2,3,4,5)
有没有给我这个矢量的所有可能的分区列表的功能x
? 我想每个分区将是向量的列表,其中每个元素x
所属的矢量中的一个。 我希望所有可能划分到任何数量组的任何尺寸。
(我觉得这样的分区的数量是一样的东西2^n * n!
其中n
是独特的元素的数量。我可能不会使用上有超过4个独特的元素载体中,此功能)。
假设我有独特的元素如的R矢量x <- c(1,2,3,4,5)
有没有给我这个矢量的所有可能的分区列表的功能x
? 我想每个分区将是向量的列表,其中每个元素x
所属的矢量中的一个。 我希望所有可能划分到任何数量组的任何尺寸。
(我觉得这样的分区的数量是一样的东西2^n * n!
其中n
是独特的元素的数量。我可能不会使用上有超过4个独特的元素载体中,此功能)。
这里有一个解决方案,将让你的分区的完整列表,其中每一个被表示为载体的列表。 因为当打印到屏幕上列出的名单是很丑陋,我还展示了如何获得更精细打印的对象。
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()
在同一封装更紧凑的方式来表示相同的一组分区。
这是否给你你在找什么,
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))
}