Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中存储长字符串(DNA序列)_R_String - Fatal编程技术网

在R中存储长字符串(DNA序列)

在R中存储长字符串(DNA序列),r,string,R,String,我写了一个函数,可以在一个长的DNA序列中找到子序列的索引。当我较长的DNA序列。。。这让我相信问题出在字符串的长度上 例如:当较长的序列是:“gatatgcatactt”,子序列是:“ATAT”时,我得到索引“1,3,9”(基于0) dnaMatch我可以复制nrussell的示例,但是这会正确地分配x,而不是编写自己的函数,为什么不使用软件包seqinr中的function words.pos呢。它似乎对多达一百万个碱基对的字符串也有效 比如说, library(seqinr) data(e

我写了一个函数,可以在一个长的DNA序列中找到子序列的索引。当我较长的DNA序列<约4000个字符时,它起作用。但是,当我尝试将相同的函数应用于更长的序列时,控制台会给我一个+而不是>。。。这让我相信问题出在字符串的长度上

例如:当较长的序列是:“gatatgcatactt”,子序列是:“ATAT”时,我得到索引“1,3,9”(基于0)


dnaMatch我可以复制nrussell的示例,但是这会正确地分配
x,而不是编写自己的函数,为什么不使用软件包seqinr中的function words.pos呢。它似乎对多达一百万个碱基对的字符串也有效

比如说,

library(seqinr)
data(ec999)
myseq <- paste(ec999[[1]], collapse="")
myseq <- paste(rep(myseq,100), collapse="")
words.pos("atat", myseq)
库(seqinr)
数据(ec999)

myseq“控制台给我一个+而不是>”-这通常是由于缺少
}
。你有没有仔细检查你的代码是否有拼写错误?对不起,澄清一下:当我试图将一个任意变量设置为一个很长的DNA序列时,控制台给了我这个提示。ie:dna我明白了,我可以通过运行
cat(paste0(rep(“abcdef”,1000),collapse=”“)
,复制输出,并尝试将其分配给一个对象
x来复制这个问题,我可以复制您的示例nrussell,但这可以正确分配
xussing
dnaMatch(x,'ATATAT')
vs
gregexpr('ATATAT',x)
在长度为100k的字符串上,分别为49秒和0.003秒。很抱歉,我再也没有耐心运行您的循环了,它使用
while
循环、增长对象和
substr
。。可能不是有史以来最快的。并且只是
regexpr
的包装器,无论如何不是最快的,但是她的例子表明她想要找到非不相交的匹配项。
基本上,我的问题是。。。有没有办法绕过string类中的字符限制?
-我认为她的问题实际上是关于R解释器的缓冲区的问题,即它一次只能处理有限数量的文本输入到控制台;不是关于她功能的表现。谢谢-这就是我最终要做的!酷!您还应该研究正则表达式匹配。在这种情况下,它可以成为救命稻草。
`test<-read.table('test.txt',stringsAsFactors = FALSE)
 length(class(test[1,1]))
[1] 1
class(test[1,1])
[1] "character"
 nchar(test[1,1])
[1] 6000`
library(seqinr)
data(ec999)
myseq <- paste(ec999[[1]], collapse="")
myseq <- paste(rep(myseq,100), collapse="")
words.pos("atat", myseq)