2011-09-17 11 views
1

3に、私は非常に単純な疑問を持っている:私は、単一のコードスプリット文字長

mycodes <- c("ATTTGGGCTAATTTTGTTTCTTTCTGGGTCTCTC") 
strsplit(mycodes, split = character(3), fixed = T, perl = FALSE, useBytes = FALSE) 

[[1]] 
[1] "A" "T" "T" "T" "G" "G" "G" "C" "T" "A" "A" "T" "T" "T" "T" "G" "T" "T" "T" "C" 
[21] "T" "T" "T" "C" "T" "G" "G" "G" "T" "C" "T" "C" "T" "C" 

に3に次のテキストを分割することができますどのようにこれは私が欲しいものではありません。私は一度に3つの文字たい:

[1] "ATT" "TGG", "GCT"...............and so on the final may be of one, two or three letters depending upon the letter availability. 

感謝を。ここで

答えて

2

require(stringr) 
start = seq(1, nchar(mycodes), 3) 
stop = pmin(start + 2, nchar(mycodes)) 
str_sub(mycodes, start, stop) 

出力は、私はあなたがコドンで仕事をしたいと仮定し

[1] "ATT" "TGG" "GCT" "AAT" "TTT" "GTT" "TCT" "TTC" "TGG" 
[10] "GTC" "TCT" "C" 
+1

ベース

library(Biostrings) ?codons 

あなたが不器用な強制の少しで、欲しいものを達成することができます'substring'関数もベクトル化されています。 – joran

5

あるstringrパッケージを使用して一つのアプローチです。そのような場合は、BioconductorのBiostringsパッケージを参照してください。それは、生物学的配列データを扱うための様々なツールを提供する。

as.character(codons(DNAString(mycodes))) 
1

ます。また、使用することができます:

strsplit(data, '(?<=.{3})', perl=TRUE) 
[[1]] 
[1] "ATT" "TGG" "GCT" "AAT" "TTT" "GTT" "TCT" "TTC" "TGG" "GTC" "TCT" "C" 

または

library(stringi) 
stri_extract_all_regex(data, '.{1,3}')