1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Bioconductor解説 Biostrings編 その4

Last updated at Posted at 2020-04-03

#過去記事

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オブジェクト系はほとんどベクトル型の挙動そっくりになっていると思うので、ぜひ気軽に触ってみてはいかがでしょうか。
では次回に続きます。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?