更新
根据您对Hamming distance 的尝试,您可以尝试以下代码
Humm_gt3 <- DNAall[1]
for (i in 2:length(DNAall)) {
split_vector <- strsplit(DNAall[i], "")[[1]]
flag_gt3 <- TRUE
for (j in 1:length(Humm_gt3)) {
split_vector2 <- strsplit(Humm_gt3[j], "")[[1]]
flag_gt3 <- flag_gt3 & (sum(split_vector != split_vector2) >= 3)
}
if (flag_gt3) Humm_gt3 <- c(Humm_gt3, DNAall[i])
}
或更轻的版本(更高效)
Humm_gt3 <- DNAall[1]
for (i in DNAall[-1]) {
v <- utf8ToInt(i)
flag_gt3 <- TRUE
for (j in Humm_gt3) {
if (sum(v != utf8ToInt(j)) < 3) {
flag_gt3 <- FALSE
break
}
}
if (flag_gt3) Humm_gt3 <- c(Humm_gt3, i)
}
给了
> Humm_gt3
[1] "AAAAAA" "GGGAAA" "TTTAAA" "CCCAAA" "TGAGAA" "CAGGAA" "ACTGAA" "GTCGAA"
[9] "CTATAA" "TCGTAA" "GATTAA" "AGCTAA" "GCACAA" "ATGCAA" "CGTCAA" "TACCAA"
[17] "CGAAGA" "TAGAGA" "GCTAGA" "ATCAGA" "GAAGGA" "AGGGGA" "CTTGGA" "TCCGGA"
[25] "ACATGA" "GTGTGA" "TGTTGA" "CACTGA" "TTACGA" "CCGCGA" "AATCGA" "GGCCGA"
[33] "GTAATA" "ACGATA" "CATATA" "TGCATA" "CCAGTA" "TTGGTA" "GGTGTA" "AACGTA"
[41] "TAATTA" "CGGTTA" "ATTTTA" "GCCTTA" "AGACTA" "GAGCTA" "TCTCTA" "CTCCTA"
[49] "TCAACA" "CTGACA" "AGTACA" "GACACA" "ATAGCA" "GCGGCA" "TATGCA" "CGCGCA"
[57] "GGATCA" "AAGTCA" "CCTTCA" "TTCTCA" "CAACCA" "TGGCCA" "GTTCCA" "ACCCCA"
上一个答案
- 您可以尝试使用
expand.grid 构建DNA 的所有组合,即DNAall,如下所示
DNAall <- do.call(paste0, expand.grid(rep(list(DNA), 6)))
- 然后,您可以使用
for 循环和adist 选择与DNA_gt3 中所有其他选定序列具有距离>=3 的DNA 序列
DNA_gt3 <- DNAall[1]
for (dna in DNAall[-1]) {
if (all(adist(dna, DNA_gt3) >= 3)) DNA_gt3 <- c(DNA_gt3, dna)
}
- 最后,您将获得一整套DNA,它们在
DNA_gt3中的任何一对之间至少有3个距离,即,
> DNA_gt3
[1] "AAAAAA" "GGGAAA" "TTTAAA" "CCCAAA" "TGAGAA" "CAGGAA" "ACTGAA" "GTCGAA"
[9] "CTATAA" "GATTAA" "GCACAA" "TACCAA" "CGAAGA" "GCTAGA" "ATCAGA" "AGGGGA"
[17] "TATGGA" "GTGTGA" "TCCTGA" "TTACGA" "CCGCGA" "GGCCGA" "GTAATA" "TGCATA"
[25] "CCAGTA" "AACGTA" "TAGTTA" "CGTTTA" "ATTCTA" "TCAACA" "AGTACA" "GCGGCA"
[33] "CTTGCA" "GGATCA" "CACTCA" "AAGCCA" "AGCAAG" "TCGGAG" "ATGTAG" "CCTTAG"
[41] "GTTCAG" "GAAAGG" "TTGAGG" "ATAGGG" "GGTGGG" "CACGGG" "AATTGG" "TCTCGG"
[49] "AAGATG" "CTCATG" "CGGGTG" "TTTGTG" "GCCGTG" "TGATTG" "CAACTG" "TACACG"
[57] "GAGTCG" "ACCTCG" "AGACCG" "CTGCCG" "CGTGAT" "AGATAT" "GCCTAT" "GAGCAT"
[65] "ATCCAT" "CAGAGT" "TGCGGT" "TAATGT" "CTTCGT" "ACAATT" "GGTATT" "GAAGTT"
[73] "ATGGTT" "TCTTTT" "CCCCTT" "TGGACT" "GTCACT" "TTAGCT" "CCATCT" "CGGTAC"
[81] "ACGCAC" "TCAGGC" "GAGGGC" "AGCTGC" "AAACGC" "TGGCGC" "TAAATC" "CATGTC"
[89] "ATATTC" "GCGTTC" "TTCCTC" "CTAACC" "GATACC" "CGCGCC" "TTGTCC" "CCTCCC"
为了你的第二个目标
由于DNA_gt3是一个完整的集合,如果你想查看randomDNA中有哪些独特的元素属于这个集合,你可以使用
unique(randomDNA[randomDNA %in% DNA_gt3])