2

これは簡単な質問のように見えますが、私に多くの頭痛の種を引き起こしています(宿題ではありませんが、実際の研究の難点です)

私は2266レベルの単一のリストを持っています。リストは次のようになります。

[1] ~/folder1/folder1/a.bin
[2] ~/folder1/folder1/b.bin
[3] ~/folder1/folder1/c.bin
[4] ~/folder1/folder2/a.bin
[5] ~/folder1/folder2/b.bin
[6] ~/folder1/folder2/c.bin

説明するために:リストは私が関数を使用して読んでいるバイナリファイルのファイル名ですreadBin。すべての行を他のすべての行と比較したいので、必要なのは、単一の列から派生した、すべての一意の組み合わせを含む2つの列です。

(choose 2266,2)1つの列を2つに2566245の組み合わせがあることを教えてくれます。

` expand.grid()は、私を途中まで連れて行ってくれるようです。しかし、必要な組み合わせは4倍あります。各5132490に2つの行があります。これは、重複があることを意味します。1+2と2+1は私の目的では同じものです。

expand.grid.dfunique=TRUEも役に立たないようです。

私の最後のアイデアは、md5が500万行のそれぞれをハッシュし、その方法で重複を検出しようとすることでした。

私のリストの2566245の組み合わせをカバーする2つのリストを作成する方法を探しています。または、すべての重複を削除する方法。私はRを使用することに完全に夢中になっているわけではなく、同じことをするためにawkまたはsedを調査したと思います。しかし、まだ成功していません。

4

1 に答える 1

2

@Arunデータを使用してcombnexpand.grid

v <- c("~/folder1/folder1/a.bin", 
       "~/folder1/folder1/b.bin", 
       "~/folder1/folder1/c.bin", 
       "~/folder1/folder2/a.bin", 
       "~/folder1/folder2/b.bin", 
       "~/folder1/folder2/c.bin")
do.call(rbind,combn(v,2,simplify=F))

    [,1]                      [,2]                     
 [1,] "~/folder1/folder1/a.bin" "~/folder1/folder1/b.bin"
 [2,] "~/folder1/folder1/a.bin" "~/folder1/folder1/c.bin"
 [3,] "~/folder1/folder1/a.bin" "~/folder1/folder2/a.bin"
 [4,] "~/folder1/folder1/a.bin" "~/folder1/folder2/b.bin"
 [5,] "~/folder1/folder1/a.bin" "~/folder1/folder2/c.bin"
 [6,] "~/folder1/folder1/b.bin" "~/folder1/folder1/c.bin"
 [7,] "~/folder1/folder1/b.bin" "~/folder1/folder2/a.bin"
 [8,] "~/folder1/folder1/b.bin" "~/folder1/folder2/b.bin"
 [9,] "~/folder1/folder1/b.bin" "~/folder1/folder2/c.bin"
[10,] "~/folder1/folder1/c.bin" "~/folder1/folder2/a.bin"
[11,] "~/folder1/folder1/c.bin" "~/folder1/folder2/b.bin"
[12,] "~/folder1/folder1/c.bin" "~/folder1/folder2/c.bin"
[13,] "~/folder1/folder2/a.bin" "~/folder1/folder2/b.bin"
[14,] "~/folder1/folder2/a.bin" "~/folder1/folder2/c.bin"
[15,] "~/folder1/folder2/b.bin" "~/folder1/folder2/c.bin"

編集

パス形式が問題を複雑にしすぎていると思います。たとえば、ファイル名の代わりに文字を使用すると、次のようになります。

do.call(rbind,combn(letters[1:4],2,simplify=F))
     [,1] [,2]
[1,] "a"  "b" 
[2,] "a"  "c" 
[3,] "a"  "d" 
[4,] "b"  "c" 
[5,] "b"  "d" 
[6,] "c"  "d"  

ご覧のとおり、重複はありません。

于 2013-03-09T10:23:07.513 に答える