9

のような一意の要素の R ベクトルがあるとしx <- c(1,2,3,4,5)ます。

このベクトルのすべての可能なパーティションのリストを表示する関数はありxますか? x各パーティションはベクトルのリストであり、各要素はベクトルの 1 つに属していると思います。可能なすべてのパーティションを、任意のサイズの任意の数のセットに分割したいと考えています。

(このようなパーティションの数は のようなものだと思います。2^n * n!ここnで、 は一意の要素の数です。おそらく、一意の要素が 4 つを超えるベクトルではこの関数を使用しないでしょう。)

4

2 に答える 2

11

これは、パーティションの完全なリストを取得するソリューションです。各パーティションは、ベクトルのリストとして表されます。リストのリストは画面に印刷するとかなり見苦しいので、よりきれいに印刷されたオブジェクトを取得する方法も示しました。

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()同じパーティションのセットを表すよりコンパクトな方法については、同じパッケージも参照してください。

于 2012-05-19T16:45:18.647 に答える
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))
}
于 2012-05-19T04:45:32.173 に答える