當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


R combn 生成 n 個元素的所有組合,一次取 m 個


R語言 combn 位於 utils 包(package)。

說明

一次生成x 中采用m 的元素的所有組合。如果x 是正整數,則返回一次采用mseq(x) 元素的所有組合。如果參數 FUN 不是 NULL ,則將參數給定的函數應用於每個點。如果 simple 為 FALSE,則返回一個列表;否則返回 array ,通常是 matrix 。如果指定,... 將原封不動地傳遞給 FUN 函數。

用法

combn(x, m, FUN = NULL, simplify = TRUE, ...)

參數

x

組合的向量源,或 x <- seq_len(n) 的整數 n

m

可供選擇的元素數量。

FUN

應用於每個組合的函數;默認 NULL 表示身份,即返回組合(長度為 m 的向量)。

simplify

邏輯指示結果是否應簡化為 array (通常為 matrix );如果為 FALSE,則該函數返回 list 。請注意,當默認情況下使用 simplify = TRUE 時,結果的維度僅由 FUN(1st combination) 確定(出於效率原因)。如果 FUN(u) 的長度不是恒定的,這將嚴重失敗。

...

可選地,FUN 的進一步參數。

細節

接受因子x

listarray ,請參閱上麵的 simplify 參數。在後一種情況下,身份 dim(combn(n, m)) == c(m, choose(n, m)) 成立。

例子

combn(letters[1:4], 2)
(m <- combn(10, 5, min))   # minimum value in each combination
mm <- combn(15, 6, function(x) matrix(x, 2, 3))
stopifnot(round(choose(10, 5)) == length(m), is.array(m), # 1-dimensional
          c(2,3, round(choose(15, 6))) == dim(mm))

## Different way of encoding points:
combn(c(1,1,1,1,2,2,2,3,3,4), 3, tabulate, nbins = 4)

## Compute support points and (scaled) probabilities for a
## Multivariate-Hypergeometric(n = 3, N = c(4,3,2,1)) p.f.:
# table.mat(t(combn(c(1,1,1,1,2,2,2,3,3,4), 3, tabulate, nbins = 4)))

## Assuring the identity
for(n in 1:7)
 for(m in 0:n) stopifnot(is.array(cc <- combn(n, m)),
                         dim(cc) == c(m, choose(n, m)),
                         identical(cc, combn(n, m, identity)) || m == 1)

作者

Scott Chasalow wrote the original in 1994 for S; R package combinat and documentation by Vince Carey stvjc@channing.harvard.edu; small changes by the R core team, notably to return an array in all cases of simplify = TRUE, e.g., for combn(5,5).

參考

Nijenhuis, A. and Wilf, H.S. (1978) Combinatorial Algorithms for Computers and Calculators; Academic Press, NY.

也可以看看

choose 用於快速計算組合數量。 expand.grid 用於根據因子或向量的所有組合創建 DataFrame 。

相關用法


注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Generate All Combinations of n Elements, Taken m at a Time。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。