对齐两个列表中的许多短序列并找到互补
Align many short sequences from two lists and find complementary
所以我在 R 中有两个列表对象,我想知道哪些序列可以通过 DNA 互补性相互结合。
第一个对象rs是反向互补microRNA种子区域,第二个是3'UTRs基序。
关于如何解决这个问题的任何线索?
我找到了一个名为 microRNAs (https://www.bioconductor.org/packages/release/bioc/manuals/microRNA/man/microRNA.pdf) 的包,其中包含一个名为 matchSeeds(seed, seq) 的函数。我这样做了,但这个函数实际上是在寻找精确匹配,这并不是我所需要的。非常感谢任何有关如何在 R 中解决此问题的线索。
谢谢!
> typeof(rs)
[1] "list"
> typeof(u)
[1] "list"
head(rs)
$`miR-92|34108_3p `
[1] "TGCAAT"
$`miR-92|34106_3p `
[1] "TGCAAT"
$`miR-92|34110_3p `
[1] "TGCAAT"
$`miR-184|1952_3p `
[1] "CCGTCC"
$`miR-184|1954_3p `
[1] "CCGTCC"
$`miR-1795_3p `
[1] "CCGTCC"
head(u)
$upper_1
[1] "gccgtt"
$upper_2
[1] "ccgagc"
$upper_3
[1] "gacatt"
$upper_4
[1] "gcttat"
$upper_5
[1] "taccta"
$upper_6
[1] "tcgtct"
如果您想查找 rs
列表中的任何子字符串是否与 u
列表中的字符串互补,并且您希望它具有高性能,您可以使用包 Biostrings 函数 matchPDict
.
示例:
library(Biostrings)
library(IRanges)
lis <- list(`miR-92|34108_3p ` = "TGCAAT",
`miR-92|34106_3p ` = "TGCAAT",
`miR-92|34110_3p ` = "TGCAAT")
u <- list(upper_1 ="gccgtt",
upper_2 = "ccgagc",
upper_3 = "gacatt",
upper_4 = "gcttat",
upper_5 = "taccta")
将第一个列表转换为 DNAStringSet:
lis <- DNAStringSetList(lis)
lis <- unlist(lis)
将第二个列表转换为 DNAStringSet:
u <- DNAStringSetList(u)
u <- unlist(u)
得到lis的补码
lis_rc <- complement(lis)
创建一个 PDict,以便您可以快速匹配它与其他列表
pdict0 <- PDict(lis_rc)
遍历列表 u
运行 matchPDict
lapply(u, function(x) matchPDict(pdict0, x))
编辑:如果您想检查任何方向,您可以使用 complement
、reverse
和 reverseComplement
等辅助函数创建它们并将其提供给 PDict
:
lis_rc <- c(lis,
complement(lis),
reverse(lis),
reverseComplement(lis))
names(lis_rc) <- paste(trimws(names(lis_rc)), rep(c("",
"c",
"r",
"rc"),
each = length(lis)),
sep = "_")
pdict0 <- PDict(lis_rc)
res <- lapply(u, function(x) matchPDict(pdict0, x))
res
是 IRanges 对象的列表
您可以使用
检查匹配的位置
lapply(res, width)
lapply(res, start)
lapply(res, end)
编辑 2:
如果你只想计算没有匹配坐标的匹配,你可以简单地使用:
vcountPDict(pdict0, u)
[,1] [,2] [,3] [,4] [,5]
[1,] 0 0 0 0 0
[2,] 0 0 0 0 0
[3,] 0 0 0 0 0
[4,] 0 0 0 0 0
[5,] 0 0 0 0 0
[6,] 0 0 0 0 0
[7,] 0 0 0 0 0
[8,] 0 0 0 0 0
[9,] 0 0 0 0 0
[10,] 0 0 0 0 0
[11,] 0 0 0 0 0
[12,] 0 0 0 0 0
行对应于 pdict0
中的序列,而列对应于 u
:
中的序列
mat <- vcountPDict(pdict0, u)
rownames(mat) <- names(lis_rc)
colnames(mat) <- names(u)
upper_1 upper_2 upper_3 upper_4 upper_5
miR-92|34108_3p_ 0 0 0 0 0
miR-92|34106_3p_ 0 0 0 0 0
miR-92|34110_3p_ 0 0 0 0 0
miR-92|34108_3p_c 0 0 0 0 0
miR-92|34106_3p_c 0 0 0 0 0
miR-92|34110_3p_c 0 0 0 0 0
miR-92|34108_3p_r 0 0 0 0 0
miR-92|34106_3p_r 0 0 0 0 0
miR-92|34110_3p_r 0 0 0 0 0
miR-92|34108_3p_rc 0 0 0 0 0
miR-92|34106_3p_rc 0 0 0 0 0
miR-92|34110_3p_rc 0 0 0 0 0
所以我在 R 中有两个列表对象,我想知道哪些序列可以通过 DNA 互补性相互结合。
第一个对象rs是反向互补microRNA种子区域,第二个是3'UTRs基序。
关于如何解决这个问题的任何线索?
我找到了一个名为 microRNAs (https://www.bioconductor.org/packages/release/bioc/manuals/microRNA/man/microRNA.pdf) 的包,其中包含一个名为 matchSeeds(seed, seq) 的函数。我这样做了,但这个函数实际上是在寻找精确匹配,这并不是我所需要的。非常感谢任何有关如何在 R 中解决此问题的线索。
谢谢!
> typeof(rs)
[1] "list"
> typeof(u)
[1] "list"
head(rs)
$`miR-92|34108_3p `
[1] "TGCAAT"
$`miR-92|34106_3p `
[1] "TGCAAT"
$`miR-92|34110_3p `
[1] "TGCAAT"
$`miR-184|1952_3p `
[1] "CCGTCC"
$`miR-184|1954_3p `
[1] "CCGTCC"
$`miR-1795_3p `
[1] "CCGTCC"
head(u)
$upper_1
[1] "gccgtt"
$upper_2
[1] "ccgagc"
$upper_3
[1] "gacatt"
$upper_4
[1] "gcttat"
$upper_5
[1] "taccta"
$upper_6
[1] "tcgtct"
如果您想查找 rs
列表中的任何子字符串是否与 u
列表中的字符串互补,并且您希望它具有高性能,您可以使用包 Biostrings 函数 matchPDict
.
示例:
library(Biostrings)
library(IRanges)
lis <- list(`miR-92|34108_3p ` = "TGCAAT",
`miR-92|34106_3p ` = "TGCAAT",
`miR-92|34110_3p ` = "TGCAAT")
u <- list(upper_1 ="gccgtt",
upper_2 = "ccgagc",
upper_3 = "gacatt",
upper_4 = "gcttat",
upper_5 = "taccta")
将第一个列表转换为 DNAStringSet:
lis <- DNAStringSetList(lis)
lis <- unlist(lis)
将第二个列表转换为 DNAStringSet:
u <- DNAStringSetList(u)
u <- unlist(u)
得到lis的补码
lis_rc <- complement(lis)
创建一个 PDict,以便您可以快速匹配它与其他列表
pdict0 <- PDict(lis_rc)
遍历列表 u
运行 matchPDict
lapply(u, function(x) matchPDict(pdict0, x))
编辑:如果您想检查任何方向,您可以使用 complement
、reverse
和 reverseComplement
等辅助函数创建它们并将其提供给 PDict
:
lis_rc <- c(lis,
complement(lis),
reverse(lis),
reverseComplement(lis))
names(lis_rc) <- paste(trimws(names(lis_rc)), rep(c("",
"c",
"r",
"rc"),
each = length(lis)),
sep = "_")
pdict0 <- PDict(lis_rc)
res <- lapply(u, function(x) matchPDict(pdict0, x))
res
是 IRanges 对象的列表
您可以使用
检查匹配的位置lapply(res, width)
lapply(res, start)
lapply(res, end)
编辑 2:
如果你只想计算没有匹配坐标的匹配,你可以简单地使用:
vcountPDict(pdict0, u)
[,1] [,2] [,3] [,4] [,5]
[1,] 0 0 0 0 0
[2,] 0 0 0 0 0
[3,] 0 0 0 0 0
[4,] 0 0 0 0 0
[5,] 0 0 0 0 0
[6,] 0 0 0 0 0
[7,] 0 0 0 0 0
[8,] 0 0 0 0 0
[9,] 0 0 0 0 0
[10,] 0 0 0 0 0
[11,] 0 0 0 0 0
[12,] 0 0 0 0 0
行对应于 pdict0
中的序列,而列对应于 u
:
mat <- vcountPDict(pdict0, u)
rownames(mat) <- names(lis_rc)
colnames(mat) <- names(u)
upper_1 upper_2 upper_3 upper_4 upper_5
miR-92|34108_3p_ 0 0 0 0 0
miR-92|34106_3p_ 0 0 0 0 0
miR-92|34110_3p_ 0 0 0 0 0
miR-92|34108_3p_c 0 0 0 0 0
miR-92|34106_3p_c 0 0 0 0 0
miR-92|34110_3p_c 0 0 0 0 0
miR-92|34108_3p_r 0 0 0 0 0
miR-92|34106_3p_r 0 0 0 0 0
miR-92|34110_3p_r 0 0 0 0 0
miR-92|34108_3p_rc 0 0 0 0 0
miR-92|34106_3p_rc 0 0 0 0 0
miR-92|34110_3p_rc 0 0 0 0 0