これは、「stringdist」パッケージに詳しい方への質問です。
次のことを行う関数を作成しようとしています。
次のような文字の非常に長いリストを検索します (約 100 万個のうちの 16 個のみが表示されます)。
> stripList
[1] "AAAAAAAAAAAAAAAAAAAAAAAAAAAADAABAAADCDDAD" "BAAAABBBDACDBABAAADDCBDADBCCBDCDDCDBCDDBA"
[3] "BDDABDCCAAABABBAACADCBDADBCCBDCDDCDBCDDBA" "AADBBACDDDBABDCABAADBCADCBDDDCCC"
[5] "BBCDBBDCCBABDBCABDBBDBDDDADCDDADDDCDDCDDD" "BDDCDACABDCCBACBADCDCBDADBCCBDCDDCDDCDDBA"
[7] "BCDBADCBBDDBBBBDCBDADBCCBDCDDCDBCDDDDAAAA" "DABDDCDACABDCCBACBADC"
[9] "CABABDDCCCCACDCCDCCDADCAAAAAAAAACADADDADA" "BAABCBBBDBCDCDDADDDDCDDADBCCBDCDD"
[11] "BBDDDACDCABDDDBBACDCBDADBCCDDCDDCDDCDDBDD" "BDDABDCCAAABABBBACADCBDADBCCBDCDDCDBCDDBA"
[13] "BDDBBBBDDBDABBACDBDCBDADBCCBDCDD" "BDDABDCCAAABABBBACADCBDADBCCBDCDDCDBCDDBA"
[15] "DABDDCDACABDCCBACBADC" "BBADBACDDBABAACABCABCDCBDADBCCBDCDDCDDDDD"
このように構造化されたクエリ シーケンス リストの各シーケンスのインスタンス。
元:
SeqName1 # queryNames
BBCDBBDCCBABDBCA # querySeqs
SeqName2 # queryNames
BBBDCCDCCCCDDDCAAACD # querySeqs
クエリ シーケンスが「stripList」のいずれかに表示される回数 (存在する場合) を確認し、1 回の挿入、1 回の削除、1 回の置換、および 1 回の転置を許可し、次のような出力を得たいと考えています。
>dt
queryNames TimesFound
SeqName1 5
seqName2 145
そのために、「stringdist」パッケージの「amatch」関数を次のように使用しています。
dt<-rapply(as.list(querySeqs), function(x) amatch(x, stripList, method = "osa", useBytes = TRUE, weight = c(d = 0.5, i = 0.5, s = 0.9, t = 0.9), maxDist=0.9))
dt<-data.frame(dt)
colnames(dt) <- "TimesFound"
dt<-cbind(queryNames,dt)
いくつかの質問を聞きたいんです:
'amatch' 関数で、method = "osa" を使用する場合、"weight" 引数はどのように解釈されますか? 例として、私が使用する場合:
method = "osa", weight = c(d = 0.5, i = 0.5, s = 0.9, t = 0.9), maxDist=0.9
「querySeqs」の 90% の一致が必要だと言っているのですか? つまり、これらの分数は「querySeqs」または私のテーブル (stripList) に関連していますか?
「maxDist」にはどのような機能がありますか? (パーセントとしても解釈されますか?)
上記のコードの実行時効率を最大化する方法はありますか (おそらく data.table などを使用して)? 私の実際のデータセットは、約 1,000,000 のシーケンス リストから検索される約 2,000 のシーケンス クエリであるため、質問するだけです。
シーケンス全体を検索する「amatch」よりも良い方法はありますか (「agrep」のように部分文字列だけでなく)?
これらが基本的な質問である場合はお詫び申し上げます。これに関するドキュメントは私には曖昧であり、率直に言って、私はまだ学んでいます。
前もって感謝します。