裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

utils:::combn の代替関数 next.combn

2019年09月02日 | ブログラミング

utils:::combn は組み合わせを配列で返すが,場合によっては一つずつ返してくれる方がうれしいこともある。

そこで,以下に示す next.combn を書いてみた。

next_combn = function(n, r, a) {
  t = r
  while (t >= 1 && a[t] == n - r + t) {
    t = t - 1
  }
  if (t ==  0) {
    return(FALSE)
  }
  a[t] = a[t] + 1
  for (i in t:r) {
    a[i] = a[t] + i - t
  }
  return(a)
}

使い方は,n, r を指定して a を 1,2, ..., n のベクトルに定義して

n = 5
r = 3
a = 1:n

以下のように引用する。print(a[1:r]) の所に,本来意図している処理プログラムを書く。

while (TRUE) {
  print(a[1:r])
  a = next_combn(n, r, a)
  if (length(a) == 1) {
    break
  }
}

 

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PVアクセスランキング にほんブログ村

PVアクセスランキング にほんブログ村