对于熟悉“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 个序列列表搜索的约 2000 个序列查询。
有没有比 'amatch' 更好的方法来查找整个序列(不仅仅是像 'agrep' 那样的子串)?
如果这些是基本问题,我很抱歉,这方面的文档对我来说很模糊,坦率地说,我还在学习。
提前致谢。