我正在寻找存储单个人类基因组所需的存储量(MB,GB,TB等).我在维基百科上阅读了一些关于DNA,染色体,碱基对,基因的文章,并且有一些粗略的猜测,但在披露任何内容之前,我想看看其他人如何处理这个问题.
另一个问题是人类DNA中有多少原子,但这对于这个网站来说不合适.
我知道这将是一个近似值,所以我正在寻找能够存储任何人类DNA的最小值.
我需要根据病毒的DNA序列生成随机游走,给出其2k碱基对的碱基对序列.序列看起来像"ATGCGTCGTAACGT".路径应向右转为A,向左转为T,向上转为G,向下转向C.如何为此目的使用Matlab,Mathematica或SPSS?
我正在使用长度为25的DNA序列(参见下面的例子).我有一个230,000的清单,需要寻找整个基因组中的每个序列(弓形虫寄生虫).我不确定基因组有多大,但比230,000个序列长得多.
我需要查找每个25个字符的序列,例如,(AGCCTCCCATGATTGAACAGATCAT).
基因组被格式化为连续的字符串,即(CATGGGAGGCTTGCGGAGCCTGAGGGCGGAGCCTGAGGTGGGAGGCTTGCGGAGTGCGGAGCCTGAGCCTGAGGGCGGAGCCTGAGGTGGGAGGCTT ....)
我不关心它被发现的地点和次数,只关注它是否存在.
我认为这很简单 -
str.find(AGCCTCCCATGATTGAACAGATCAT)
Run Code Online (Sandbox Code Playgroud)
但我还要找到在任何位置定义为错误(不匹配)的近距离匹配,但只有一个位置,并记录序列中的位置.我不知道怎么做到这一点.我唯一能想到的是使用通配符并在每个位置使用通配符执行搜索.即,搜索25次.
例如,
AGCCTCCCATGATTGAACAGATCAT
AGCCTCCCATGATAGAACAGATCAT
与位置13处的不匹配密切匹配.
速度不是一个大问题,因为我只做了3次,但如果它很快就会很好.
有些程序可以执行此操作 - 查找匹配项和部分匹配项 - 但我正在寻找一种使用这些应用程序无法发现的部分匹配项.
这是perl的类似帖子,虽然它们只是比较序列而不是搜索连续的字符串:
我需要比较X和Y染色体的DNA序列,并找到Y染色体独有的模式(由大约50-75个碱基对组成).注意,这些序列部分可以在染色体中重复.这需要快速完成(BLAST需要47天,需要几个小时或更短时间).是否有任何算法或程序特别适合这种比较?同样,速度是关键.
我把它放在SO上的原因之一是从特定应用领域之外的人那里获得视角,他们可以提出他们在日常使用中用于字符串比较的算法,这可能适用于我们的使用.所以不要害羞!
我找不到解决这个问题的方法.
输入输出序列如下:
**input1 :** aaagctgctagag
**output1 :** a3gct2ag2
**input2 :** aaaaaaagctaagctaag
**output2 :** a6agcta2ag
Run Code Online (Sandbox Code Playgroud)
输入序列可以是10 ^ 6个字符,并且将考虑最大的连续模式.
例如,对于input2"agctaagcta"输出将不是"agcta2gcta",但它将是"agcta2".
任何帮助赞赏.
我已经搜索过并且能够找到此论坛讨论以实现重叠匹配的效果.
我还发现了以下SO问题,即找到索引来执行此任务,但是无法找到任何关于在R语言中抓取重叠匹配的简洁信息.
我可以在支持(PCRE)的大多数语言中通过使用正向前端断言执行此任务,同时在先行内部实现捕获组以捕获重叠的匹配.
但是,虽然实际执行此操作的方式与其他语言相同,但perl=T
在R中使用时,结果不会产生.
> x <- 'ACCACCACCAC'
> regmatches(x, gregexpr('(?=([AC]C))', x, perl=T))[[1]]
[1] "" "" "" "" "" "" ""
Run Code Online (Sandbox Code Playgroud)
使用stringi
和stringr
包都是一样的.
> library(stringi)
> library(stringr)
> stri_extract_all_regex(x, '(?=([AC]C))')[[1]]
[1] "" "" "" "" "" "" ""
> str_extract_all(x, perl('(?=([AC]C))'))[[1]]
[1] "" "" "" "" "" "" ""
Run Code Online (Sandbox Code Playgroud)
执行此操作时应返回的正确结果是:
[1] "AC" "CC" "AC" "CC" "AC" "CC" "AC"
Run Code Online (Sandbox Code Playgroud)
我很清楚,regmatches
对于捕获的匹配不能很好地工作,但是在regmatches中究竟是什么导致了这种行为?为什么没有返回结果?我正在寻找一个有点详细的答案.
是stringi
和 …
我已经尝试了mathematica代码,用于在这个地址中发布DNA序列的混沌游戏:http: //facstaff.unca.edu/mcmcclur/blog/GeneCGR.html
这是这样的:
genome = Import["c:\data\sequence.fasta", "Sequence"];
genome = StringReplace[ToString[genome], {"{" -> "", "}" -> ""}];
chars = StringCases[genome, "G" | "C" | "T" | "A"];
f[x_, "A"] := x/2;
f[x_, "T"] := x/2 + {1/2, 0};
f[x_, "G"] := x/2 + {1/2, 1/2};
f[x_, "C"] := x/2 + {0, 1/2};
pts = FoldList[f, {0.5, 0.5}, chars];
Graphics[{PointSize[Tiny], Point[pts]}]
Run Code Online (Sandbox Code Playgroud)
我所拥有的fasta序列只是像AACCTTTGATCAAA这样的字母序列,要生成的图形如下:
代码适用于小序列,但是当我想要放置一个巨大的序列,例如几乎40Mb的染色体时,该程序需要花费大量时间并且只显示黑色方块,因此无法进行分析.是否有可能改进上述代码,以便显示它的方格会更大?,方式必须只是方形单位.感谢您的帮助
这是一个关于更有效的代码设计的问题:
假设三个对齐的DNA序列(seq1,seq2和seq3;它们是每个串)代表两个基因(gene1和gene2).相对于比对的DNA序列,已知这些基因的起始和终止位置.
# Input
align = {"seq1":"ATGCATGC", # In seq1, gene1 and gene2 are of equal length
"seq2":"AT----GC",
"seq3":"A--CA--C"}
annos = {"seq1":{"gene1":[0,3], "gene2":[4,7]},
"seq2":{"gene1":[0,3], "gene2":[4,7]},
"seq3":{"gene1":[0,3], "gene2":[4,7]}}
Run Code Online (Sandbox Code Playgroud)
我希望从比对中去除间隙(即破折号)并保持基因起始和终止位置的相对关联.
# Desired output
align = {"seq1":"ATGCATGC",
"seq2":"ATGC",
"seq3":"ACAC"}
annos = {"seq1":{"gene1":[0,3], "gene2":[4,7]},
"seq2":{"gene1":[0,1], "gene2":[2,3]},
"seq3":{"gene1":[0,1], "gene2":[2,3]}}
Run Code Online (Sandbox Code Playgroud)
获得所需的输出并不像看起来那么简单.下面我为这个问题写了一些(行编号)伪代码,但肯定有更优雅的设计.
1 measure length of any aligned gene # take any seq, since all seqs aligned
2 list_lengths = list of gene lengths # order is important
3 for seq in alignment
4 outseq …
Run Code Online (Sandbox Code Playgroud) 鉴于这些输入:
my $init_seq = "AAAAAAAAAA" #length 10 bp
my $sub_rate = 0.003;
my $nof_tags = 1000;
my @dna = qw( A C G T );
Run Code Online (Sandbox Code Playgroud)
我想生成:
一千个长度 - 10个标签
标签中每个位置的替代率为0.003
产量如下:
AAAAAAAAAA
AATAACAAAA
.....
AAGGAAAAGA # 1000th tags
Run Code Online (Sandbox Code Playgroud)
在Perl中有一种紧凑的方式吗?
我坚持使用这个脚本的逻辑作为核心:
#!/usr/bin/perl
my $init_seq = "AAAAAAAAAA" #length 10 bp
my $sub_rate = 0.003;
my $nof_tags = 1000;
my @dna = qw( A C G T );
$i = 0;
while ($i < length($init_seq)) {
$roll = int(rand 4) + 1; # …
Run Code Online (Sandbox Code Playgroud) 我有一个字符串列表(DNA序列),包括A,T,C,G.我想找到所有匹配并插入到表中,其列是这些DNA字母表的所有可能组合(4 ^ k;"k"是每个匹配的长度 - K-mer - 并且必须由用户指定)并且行表示数字在列表中按顺序匹配.
让我们说我的名单包括5名成员:
DNAlst<-list("CAAACTGATTTT","GATGAAAGTAAAATACCG","ATTATGC","TGGA","CGCGCATCAA")
Run Code Online (Sandbox Code Playgroud)
我想要套装k=2
(2-mer),所以4^2=16
组合可用,包括AA,AT,AC,AG,TA,TT,...
所以我的桌子会有5 rows
和16 columns
.我想计算我的k-mers和列表成员之间的匹配数量.
我想要的结果: df:
lstMemb AA AT AC AG TA TT TC ...
1 2 1 1 0 0 3 0
2 ...
3
4
5
Run Code Online (Sandbox Code Playgroud)
你能帮我在R中实现吗?