順序を維持しながら、私は、ベクトルを持っているvec1
を言うと、次のようにvec2
という名前の別のベクトル:2つのベクトルのすべての可能な組み合わせR
vec1 = c(4,1)
# [1] 4 1
vec2 = c(5,3,2)
# [1] 5 3 2
私が探している何がvec1
のすべての可能な組み合わせでありますvec2
であり、ベクトルの要素の順序は維持される。つまり、結果の行列は次のようになります。
> res
[,1] [,2] [,3] [,4] [,5]
[1,] 4 1 5 3 2
[2,] 4 5 1 3 2
[3,] 4 5 3 1 2
[4,] 4 5 3 2 1
[5,] 5 4 1 3 2
[6,] 5 4 3 1 2
[7,] 5 4 3 2 1
[8,] 5 3 4 1 2
[9,] 5 3 4 2 1
[10,] 5 3 2 4 1
# res=structure(c(4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 1, 5, 5, 5, 4, 4, 4,
# 3, 3, 3, 5, 1, 3, 3, 1, 3, 3, 4, 4, 2, 3, 3, 1, 2, 3, 1, 2, 1,
# 2, 4, 2, 2, 2, 1, 2, 2, 1, 2, 1, 1), .Dim = c(10L, 5L))
2つのベクトルの繰り返しは許されません。つまり、結果の行列のすべての行に固有の要素があります。
私は実際に最も効率的な方法を探しています。この問題に取り組む1つの方法は、因子的に成長する長さnのすべての可能な順列(ここではn=5
)を生成してからフィルタリングを適用することです。しかし、n
が大きくなると時間がかかります。
それを行うための効率的な方法はありますか?
だから、それはあなたが順列をしたくない明らかだが、あなたが「注文を保つ」ことにより、正確に何を意味するのですか? 'vec2'のすべての要素は元のインデックス順でなければなりませんが(vec1'でも同じですが)、ある入力の要素が他の要素の前にあるかどうかに制限はありません。次に、両方のベクトルに共通の値がある場合はどうなりますか?それとも、起こらないことが保証されていますか? –