繁体   English   中英

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

[英]storing long strings (DNA sequence) in R

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

例如:当较长的序列是:“ GATATATGCATATACTT”,而子序列是:“ ATAT”时,我得到的索引是“ 1、3、9”(从0开始)

dnaMatch <- function(dna, sequence) {
  ret <- list()
  k <- str_length(sequence)
  c <- str_length(dna) - k 
  for(i in 1:(c+1)) {
    ret[i] = str_sub(dna, i, i+k-1)
  }
  ret <- unlist(ret)
  TFret <- lapply (ret, identical, sequence)
  TFret <- which(unlist(TFret), arr.ind = TRUE) -1
  print(TFret)
}

基本上,我的问题是...字符串类中的字符限制有什么办法吗?

我可以复制nrussell的示例,但这可以正确分配x<-paste0(rep("abcdef",1000),collapse="") -可能的解决方法是将字符串写入.txt文件并读取.txt文件直接进入R:

test.txt是一个6,000个字符的长字符串。

`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`

与其编写自己的函数,不如不使用seqinr包中的words.pos函数。 它甚至可以用于多达一百万个碱基对的字符串。

例如,

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM