【发布时间】:2018-09-24 22:28:55
【问题描述】:
我一直在徘徊这个程序问题,但我还没有得到一个明确的答案......
我有两个对象,比如说 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"
而对象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加起来,从而得到AU、GC和GU是多少在序列中。
有什么帮助吗?
【问题讨论】:
-
您需要为 RNA 折叠构建一个 context-free grammar 并在您的输入上运行它。可能有一个现有的 R 实现,但我不知道有一个。在这种情况下,在bioinformatics.stackexchange.com 上提问可能会增加您的机会。
标签: r string indexing structure