gpt4 book ai didi

r - 在 R 中的序列中查找 A-U、C-G 和 G-U 对比例

转载 作者:行者123 更新时间:2023-12-02 04:30:00 25 4
gpt4 key购买 nike

我一直在徘徊这个编程问题,但我还没有得出明确的答案......

我有两个对象,比如 a 和 b。对象a是一个字符串,代表一个RNA序列,像这样:

> a
[1] "C" "A" "C" "C" "U" "U" "G" "U" "C" "C" "U" "C" "A" "C" "G" "G" "U" "C" "C" "A" "G" "U" "U" "U" "U" "C" "C" "C" "A" "G"
[31] "G" "A" "A" "U" "C" "C" "C" "U" "U" "A" "G" "A" "U" "G" "C" "U" "G" "A" "G" "A" "U" "G" "G" "G" "G" "A" "U" "U" "C" "C"
[61] "U" "G" "G" "A" "A" "A" "U" "A" "C" "U" "G" "U" "U" "C" "U" "U" "G" "A" "G" "G" "U" "C" "A" "U" "G" "G"

而object b是另一个字符串,表示一个折叠结构,其中“(”符号表示a中的一个字母,与另一个相同顺序的字母配对,表示为“)”。符号“.”表示这个字母没有配对。

对象 b 看起来像这样:

> b
[1] "." "." "(" "(" "." "(" "(" "." "(" "(" "(" "(" "(" "." "(" "(" "." "." "(" "(" "(" "(" "." "(" "(" "." "(" "(" "(" "("
[31] "(" "(" "(" "(" "(" "(" "(" "(" "." "." "." "." "." "." "." "." "." "." "." "." "." ")" ")" ")" ")" ")" ")" ")" ")" ")"
[61] ")" ")" ")" "." ")" ")" "." ")" ")" ")" ")" "." "." ")" ")" ")" ")" ")" ")" ")" "." ")" ")" "." ")" ")"

如果你统计每个对象a和b中的字符个数,它们是相同的,那么这意味着b中的第一个字符对应于a中的第一个字符,依此类推。比如说,在这种情况下,a[1] 是“C”,对应于 b[1],是“.”,这意味着序列中的这个字母没有配对,但是当我们到达 b[3] 时,它是“(”,a中的第一个成对字母,对应于a[3]或“C”。这个第一个“(”在b中,成对的字母“C”,在a中,连接到最后一个“)”符号b,它对应于b[86],因此对应于a[86],也就是“G”。

b中的第一个“(”与b中的最后一个“)”形成一对,以此类推。

如您所见,我的目标是确定序列中出现了多少对 A-U、C-G 和 G-U。

我有那里的信息,但我想不出 R 中的编程方法(我正在构建我的算法以从这两个对象中提取其他特征)来处理这个问题。

我想到了提取每个“(”和每个“)”的索引号,并用它来找到a中对应的字母,然后将a[3]与a[86]组合等等,以形成另一个对象。

所需的输出类似于构造一个由对组合组成的对象,比如 c:

> c
[1] "CG" "CG" "UA" "GC" "CG" "CG" "UA" "CG" "AU" "GU" "GC"....

这样我就可以算出有多少个CG,GC加起来,有多少个AU,UA加起来,有多少个GU或者UG加起来,从而得到A-U,G-C,G-U有多少个在序列中。

有什么帮助吗?

最佳答案

当所有“(”都在第一个“)”之前时,您可以简单地提取两个子向量,反转第二个并将它们组合起来:

data.frame(pair1 = a[b == "("], pair2 = rev(a[b == ")"]))

或者你可以使用

mapply(paste0, a[b == "("], rev(a[b == ")"]))

如果您实际上正在寻找具有多个循环的通用解决方案,您可以将 stackfor 循环结合起来:

library(dequer)
s <- stack()
q <- queue()
for (i in seq_along(a)) {
if(b[i] == "(")
push(s, a[i])
else if(b[i] == ")")
pushback(q, paste0(pop(s), a[i]))
}
unlist(as.list(q))

关于r - 在 R 中的序列中查找 A-U、C-G 和 G-U 对比例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49836025/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com