#過去記事
Bioconductor 解説 Biostrings 編 その1
Bioconductor 解説 Biostrings 編 その2
Bioconductor 解説 Biostrings 編 その3
#はじめに
今回はこれまで紹介していないXStringオブジェクト・XStringSetオブジェクトの基礎的なメソッド・演算子を紹介していきたいと思います。
紹介内容はBioconductorが配布しているマニュアル「Biostrings Quick Overview」に準拠しています。
##head()
対象オブジェクト | 適用 |
---|---|
XString オブジェクト | ✅ |
XStringSet オブジェクト | ✅ |
XStringオブジェクトに適用した場合、配列の5'側のほうの配列を取り出します。
XStringSetオブジェクトに適用した場合、インデックスが小さいほうの配列を取り出します。
###XStringオブジェクトでの引数
####x
:XStringオブジェクト
####n
:取り出す文字数(左側から)
message("例1")
head( DNAString( x="AAACCCCCCAA" ) )
message("例2")
head( DNAString( x="AAACCCCCCAA" ), n=3 )
例1
6-letter "DNAString" instance
seq: AAACCC
例2
3-letter "DNAString" instance
seq: AAA
###XStringSetオブジェクトでの引数
####x
:XStringSetオブジェクト
####n
:取り出す配列の数(インデックスが小さいほうから)
seq.vec <- c( "AA", "TGTG", "AAC", "CA", "TGCG", "TTC", "AAC", "CA", "TTC" ) # 配列7個
message("例1")
head( DNAStringSet( x=seq.vec ) )
message("例2")
head( DNAStringSet( x=seq.vec ), n=2 )
例1
A DNAStringSet instance of length 6
width seq
[1] 2 AA
[2] 4 TGTG
[3] 3 AAC
[4] 2 CA
[5] 4 TGCG
[6] 3 TTC
例2
A DNAStringSet instance of length 2
width seq
[1] 2 AA
[2] 4 TGTG
##tail()
対象オブジェクト | 適用 |
---|---|
XString オブジェクト | ✅ |
XStringSet オブジェクト | ✅ |
XStringオブジェクトに適用した場合、配列の3'側のほうの配列を取り出します。
XStringSetオブジェクトに適用した場合、インデックスが大きいほうの配列を取り出します。
###XStringオブジェクトでの引数
####x
:XStringオブジェクト
####n
:取り出す文字数(右側から)
message("例1")
tail( DNAString( x="AAACCCCCCAA" ) )
message("例2")
tail( DNAString( x="AAACCCCCCAA" ), n=3 )
例1
6-letter "DNAString" instance
seq: CCCCAA
例2
3-letter "DNAString" instance
seq: CAA
###XStringSetオブジェクトでの引数
####x
:XStringSetオブジェクト
####n
:取り出す配列の数(インデックスが大きいほうから)
seq.vec <- c( "AA", "TGTG", "AAC", "CA", "TGCG", "TTC", "AAC", "CA", "TTC" ) # 配列7個
message("例1")
tail( DNAStringSet( x=seq.vec ) )
message("例2")
tail( DNAStringSet( x=seq.vec ), n=2 )
例1
A DNAStringSet instance of length 6
width seq
[1] 2 CA
[2] 4 TGCG
[3] 3 TTC
[4] 3 AAC
[5] 2 CA
[6] 3 TTC
例2
A DNAStringSet instance of length 2
width seq
[1] 2 CA
[2] 3 TTC
##rev()
対象オブジェクト | 適用 |
---|---|
XString オブジェクト | ✅ |
XStringSet オブジェクト | ✅ |
XStringオブジェクトに適用した場合、配列を逆順に並び替えます。
XStringSetオブジェクトに適用した場合、インデックスの順番を逆にします。
###XStringオブジェクトでの引数
####x
:XStringオブジェクト
message("例")
rev( DNAString( x="AAACCCCCCAA" ) )
例
11-letter "DNAString" instance
seq: AACCCCCCAAA
###XStringSetオブジェクトでの引数
####x
:XStringSetオブジェクト
seq.vec <- c( "AA", "TGTG", "AAC", "CA", "TGCG", "TTC", "AAC", "CA", "TTC" )
message("例")
rev( DNAStringSet( x=seq.vec ) )
例
A DNAStringSet instance of length 9
width seq
[1] 3 TTC
[2] 2 CA
[3] 3 AAC
[4] 3 TTC
[5] 4 TGCG
[6] 2 CA
[7] 3 AAC
[8] 4 TGTG
[9] 2 AA
##c()
対象オブジェクト | 適用 |
---|---|
XString オブジェクト | ✅ |
XStringSet オブジェクト | ✅ |
XStringオブジェクトに適用した場合、配列を結合します。
XStringSetオブジェクトに適用した場合、配列を追加します。
###XStringオブジェクトでの引数
####x
:結合先XStringオブジェクト
####y
:結合されるXStringオブジェクト
※引数は無制限で増やせます。
message("例")
c( DNAString( x="AAACCCCCCAA" ), DNAString( x="TGGCGTA" ) )
例
18-letter "DNAString" instance
seq: AAACCCCCCAATGGCGTA
###XStringSetオブジェクトでの引数
####x
:追加先XStringSetオブジェクト
####y
:追加されるXStringSetオブジェクト
※引数は無制限で増やせます。
seq1.vec <- c( "AA", "TGTG", "AAC", "CA", "TGCG", "TTC", "AAC", "CA", "TTC" )
seq2.vec <- c( "CC", "GAT", "CCCCC", "GTA" )
message("例")
c( DNAStringSet( x=seq1.vec ), DNAStringSet( x=seq2.vec ) )
例
A DNAStringSet instance of length 13
width seq
[1] 2 AA
[2] 4 TGTG
[3] 3 AAC
[4] 2 CA
[5] 4 TGCG
... ... ...
[9] 3 TTC
[10] 2 CC
[11] 3 GAT
[12] 5 CCCCC
[13] 3 GTA
###c()を入れ子にした場合
ちなみに入れ子にした場合は次のような挙動になります。
seq1.vec <- c( "AA", "TGTG", "AAC", "CA", "TGCG", "TTC", "AAC", "CA", "TTC" )
seq2.vec <- c( "CC", "GAT", "CCCCC", "GTA" )
seq3.vec <- c( "TTTTT", "AAAAAAAA")
message("例")
c( c( DNAStringSet( x=seq1.vec ), DNAStringSet( x=seq2.vec ) ), DNAStringSet( x=seq3.vec ))
例
A DNAStringSet instance of length 15
width seq
[1] 2 AA
[2] 4 TGTG
[3] 3 AAC
[4] 2 CA
[5] 4 TGCG
... ... ...
[11] 3 GAT
[12] 5 CCCCC
[13] 3 GTA
[14] 5 TTTTT
[15] 8 AAAAAAAA
内包されたc()が内部で展開されて、一つのXStringSetオブジェクトとして作成されます。
通常、c()
で作成されるベクトル型は先ほどのように入れ子にすると同様に展開されます。XStringSetオブジェクトのメソッドc()
も同様の仕様になっているといえるでしょう。
message("例")
c( c(1, 2), 3 )
例
[1] 1 2 3
どうしても入れ子の状態でデータを保持しておきたい場合はc()
ではなくlist()
を使えばよいです。
seq1.vec <- c( "AA", "TGTG", "AAC", "CA", "TGCG", "TTC", "AAC", "CA", "TTC" )
seq2.vec <- c( "CC", "GAT", "CCCCC", "GTA" )
seq3.vec <- c( "TTTTT", "AAAAAAAA")
message("例")
list(
list( DNAStringSet( x=seq1.vec ), DNAStringSet( x=seq2.vec ) ),
DNAStringSet( x=seq3.vec )
)
例
[[1]]
[[1]][[1]]
A DNAStringSet instance of length 9
width seq
[1] 2 AA
[2] 4 TGTG
[3] 3 AAC
[4] 2 CA
[5] 4 TGCG
[6] 3 TTC
[7] 3 AAC
[8] 2 CA
[9] 3 TTC
[[1]][[2]]
A DNAStringSet instance of length 4
width seq
[1] 2 CC
[2] 3 GAT
[3] 5 CCCCC
[4] 3 GTA
[[2]]
A DNAStringSet instance of length 2
width seq
[1] 5 TTTTT
[2] 8 AAAAAAAA
あとこれはRの基本知識ですが、list()で作成されるリスト型の要素は型が違っていても格納できます(忘れがち?)。
seq1.vec <- c( "AA", "TGTG", "AAC", "CA", "TGCG", "TTC", "AAC", "CA", "TTC" )
message("例")
list(
DNAStringSet( x=seq1.vec ),
DNAString( x="AAACCCCCCAA" ),
3
)
例
[[1]]
A DNAStringSet instance of length 9
width seq
[1] 2 AA
[2] 4 TGTG
[3] 3 AAC
[4] 2 CA
[5] 4 TGCG
[6] 3 TTC
[7] 3 AAC
[8] 2 CA
[9] 3 TTC
[[2]]
11-letter "DNAString" instance
seq: AAACCCCCCAA
[[3]]
[1] 3
##==(等価演算子)
対象オブジェクト | 適用 |
---|---|
XString オブジェクト | ✅ |
XStringSet オブジェクト | ✅ |
XStringオブジェクトに適用した場合、配列が同一の場合はTRUE、違えばFALSEです。
XStringSetオブジェクトに適用した場合、同じインデックス間で配列を比較して同じであればTRUE、違えばFALSEと判定し、最終的に論理値ベクトルを返します。
###XStringオブジェクトの場合
message("例1")
DNAString( x="AAACCCCCCAA" ) == DNAString( x="AAACCCCCCAA" )
message("例2")
DNAString( x="AAACCCCCCAA" ) == DNAString( x="TTACCCCCCAC" )
例1
[1] TRUE
例2
[1] FALSE
###XStringSetオブジェクトの場合
seq1.vec <- c( "AA", "TGTG", "AAC", "CA", "TGCG", "TTC", "AAC", "CA", "TTC" )
seq2.vec <- c( "AA", "TTT", "AAC", "A", "TGCG", "TT", "AAC", "CA", "TTC" )
seq3.vec <- c( "AA", "TTTT", "A", "CA", "TGCG", "TTC" )
message("例1")
DNAStringSet( x=seq1.vec ) == DNAStringSet( x=seq2.vec )
message("例2")
DNAStringSet( x=seq1.vec ) == DNAStringSet( x=seq3.vec )
例1
[1] TRUE FALSE TRUE FALSE TRUE FALSE TRUE TRUE TRUE
例2
[1] TRUE FALSE FALSE TRUE TRUE TRUE FALSE FALSE FALSE
Warning message:
In .Call2("XRawList_pcompare", x, y, PACKAGE = "XVector") :
longer object length is not a multiple of shorter object length
比較したXStringSet間で配列数に違いがある場合は、その分だけリピートして比較を行います。
ちなみにすべての配列が一致しているかどうかを判定する場合はall()
、どれか一つでも一致しているかどうか判定する場合はany()
が使えます。
seq1.vec <- c( "AA", "TGTG", "AAC", "CA", "TGCG", "TTC", "AAC", "CA", "TTC" )
seq2.vec <- c( "AA", "TTT", "AAC", "A", "TGCG", "TT", "AAC", "CA", "TTC" )
seq3.vec <- c( "AC", "TGT", "CAC", "T", "AGCG", "GT", "C", "A", "TAC" )
message("例1")
all( DNAStringSet( x=seq1.vec ) == DNAStringSet( x=seq1.vec ) )
message("例2")
all( DNAStringSet( x=seq1.vec ) == DNAStringSet( x=seq2.vec ) )
message("例3")
any( DNAStringSet( x=seq1.vec ) == DNAStringSet( x=seq1.vec ) )
message("例4")
any( DNAStringSet( x=seq1.vec ) == DNAStringSet( x=seq2.vec ) )
message("例5")
any( DNAStringSet( x=seq1.vec ) == DNAStringSet( x=seq3.vec ) )
例1
[1] TRUE
例2
[1] FALSE
例3
[1] TRUE
例4
[1] TRUE
例5
[1] FALSE
##%in%演算子
左オブジェクト | 右オブジェクト | 適用 |
---|---|---|
XString オブジェクト | XString オブジェクト | ❌ |
XStringSet オブジェクト | XString オブジェクト | ✅ |
XString オブジェクト | XStringSet オブジェクト | ✅ |
XStringSet オブジェクト | XStringSet オブジェクト | ✅ |
左オブジェクトの配列が右オブジェクトの配列と一致しているかを判定します。
※ %in%演算子はmatch()でも代用できます。
seq1.vec <- c( "AA", "TGTG", "AAC", "CA", "TGCG", "TTC", "AAC", "CA", "TTC" )
seq2.vec <- c( "AA", "TTT", "AAC", "A", "TGCG", "TT", "AAC", "CA", "TTC" )
seq3.vec <- c( "AC", "TGT", "CAC", "T", "AGCG", "GT", "C", "A", "TAC" )
seq4.vec <- c( "AA", "TTT", "AAC", "A" )
message("例1")
DNAStringSet( x=seq1.vec ) %in% DNAString( x="AAC" )
message("例2")
DNAString( x="AAC" ) %in% DNAStringSet( x=seq1.vec )
message("例3")
DNAStringSet( x=seq1.vec ) %in% DNAStringSet( x=seq1.vec )
message("例4")
DNAStringSet( x=seq1.vec ) %in% DNAStringSet( x=seq2.vec )
message("例5")
DNAStringSet( x=seq1.vec ) %in% DNAStringSet( x=seq3.vec )
message("例6")
DNAStringSet( x=seq1.vec ) %in% DNAStringSet( x=seq4.vec )
例1
[1] FALSE FALSE TRUE FALSE FALSE FALSE TRUE FALSE FALSE
例2
[1] TRUE
例3
[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
例4
[1] TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
例5
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
例6
[1] TRUE FALSE TRUE FALSE FALSE FALSE TRUE FALSE FALSE
%in%はBiostringに限らずよく使われる演算子で、以下のように左に文字、右にベクトルをおいて一致する要素があるか判定させたりします
blacklist.vec <- c("Sato", "Suzuki", "Tanaka")
"Suzuki" %in% blacklist.vec
[1] TRUE
例2がそれと同じ使い方ですね。
XStringSet同士を比較した場合は、等価演算子と同じ挙動をします。
#さいごに
紹介するメソッドはまだまだありますが、長くなってきたのでとりあえずここまでとします。
今回紹介したメソッドの仕様はRの基本型の関数仕様とよく似ています。特にXStringSetオブジェクト系はほとんどベクトル型の挙動そっくりになっていると思うので、ぜひ気軽に触ってみてはいかがでしょうか。
では次回に続きます。