Bioconductor 解説 Biostrings 編 その１


はじめに
--

　Bioconductor 周辺のまとまった日本語解説が少ないので記載していこうと思います。
　といっても私はRのプロフェッショナルというわけでもないので、マニュアルを翻訳していくようなレベルでしかないですが、なるべく体系的な理解ができるような記述にしていきたいです。
　
　何か気がつく点、間違っている点などがありましたらぜひともコメント頂けると嬉しいです。
　

Biostrings パッケージ
--

　さて、最初はBiostrings パッケージについて説明していこうと思います。
　
　Biostrings は生物の配列情報を扱うのに優れたパッケージです。
　またBioconductor ではBiostrings があることを前提にしたものも多く、欠かすことのできない存在であります。
　
　一方で、クラスベースのオブジェクト指向であるために初学者のつまずくポイントであるように思います。
　慣れた人にはくどい説明かもしれませんが、このあたりも適宜説明していきたいと思います。

Biostrings のインストール
--

　以下の方法でbioLite を使えるようにします。
　以下をコピペしていきましょう。

```R:bioLiteのインストール
## try http:// if https:// URLs are not supported
source("https://bioconductor.org/biocLite.R")
biocLite("Biostrings")
```

```R:Biostringsのロード
library(Biostrings)
```

　これで使えるようになるはずです。

BString objects
--

　Biostringsにおいて、配列情報を格納するオブジェクトです。
　以下のようにして生成することができます。

```R:BStringインスタンスの生成
> BSobj = BString(x="This is BString object", start=1, nchar=NA)
> BSobj
```

```R:出力
22-letter "BString" instance
seq: This is BString object
```

　このコンストラクタの引数は以下のようなものとなっています。

* x：{string}     配列データ

* start：{number} 読み込み開始地点（"-"で末尾からの参照）

* nchar：{number} 読む込む文字の数

　例をみてもわかるように、配列データはなんだって構わないようです。
　また、startやncharを指定することで読み込む配列を調整することができます。

```R:例
> BString(x="This is BString object", start = 6)
17-letter "BString" instance
seq: is BString object

> BString(x="This is BString object", start = 6, nchar = 4)
4-letter "BString" instance
seq: is B

> BString(x="This is BString object", start = -6)
6-letter "BString" instance
seq: object
```

　次にデータ構造を見てみましょう。
　基本的にこのようなオブジェクトというものは複数の変数を格納しています。
　str()で展開すると以下のようになっています。

```R:BStringオブジェクトのデータ構造
> BSobj = BString(x="This is BString object", start=1, nchar=NA)
> BSobj
> str(BSobj)
Formal class 'BString' [package "Biostrings"] with 5 slots
  ..@ shared         :Formal class 'SharedRaw' [package "XVector"] with 2 slots
  .. .. ..@ xp                    :<externalptr> 
  .. .. ..@ .link_to_cached_object:<environment: 0x1100f2c60> 
  ..@ offset         : int 0
  ..@ length         : int 22
  ..@ elementMetadata: NULL
  ..@ metadata       : list()
```

　これらの成分はスロットと呼ばれ、@でアクセスすることが可能です。

```R:スロットへのアクセス
> BSobj@length
[1] 22
```

　パッとみて配列情報が見当たりませんが、配列情報はXVectorパッケージのSharedRawクラスが預かっているようです。
　あまり深入りすると際限なくなるので突っ込んで解説することはしませんが、配列情報は以下のコマンドで取り出すことが可能です。

```R:BStringオブジェクトの"配列"を取り出す
> as.character(BSobj)
[1] "This is BString object"
```

　長さは@でスロットにアクセスしても良いですが、相手はオブジェクトなのでできればマニュアルに指定された関数を介して参照するほうが良いと思います。

```R:BStringオブジェクトの"配列の長さ"を取り出す
> length(BSobj)
[1] 22
```

　subseq()で配列切り出したオブジェクトを作成することも可能です。

　引数説明

<dl>
  <dt>x {BString object}</dt>
  <dd>配列データ</dd>
  <dt>start {number}</dt>
  <dd>読み込み開始位置 （デフォルト:1）</dd>
  <dt>end {number}</dt>
  <dd>読み込み終了位置 （デフォルト:末尾）</dd>
  <dt>width {number}</dt>
  <dd>読み込む文字の数</dd>
</dl>

※startとendを引数とした場合、widthは決定されてしまうので同時に使うことはできません。


```R:BStringオブジェクトの"配列の長さ"を取り出す
> subseq(BSobj , start = 4)
  19-letter "BString" instance
seq: s is BString object
> subseq(BSobj , start = 4 , end = 10)
  7-letter "BString" instance
seq: s is BS
> subseq(BSobj , start = 4 , width = 10)
  10-letter "BString" instance
seq: s is BStri
> subseq(BSobj , start = -4)
  4-letter "BString" instance
seq: ject
> subseq(BSobj , end = -4)
  19-letter "BString" instance
seq: This is BString obj
> subseq(BSobj , start = -10, end = -4)
  7-letter "BString" instance
seq: ing obj
```

　ベクトルで切り出すことも可能です。

```R:ベクトルからBStringオブジェクトの"配列の長さ"を取り出す
> BSobj[4:12]
  9-letter "BString" instance
seq: s is BStr
```
　この場合ではベクトルを逆転させることで逆さまの配列を取り出すことができます。

```R:ベクトルからBStringオブジェクトの"配列の長さ"を取り出す
> BSobj[12:4]
  9-letter "BString" instance
seq: rtSB si s
```

　今回はここまでとします。
　次の回ではもう少し説明を行なったのち、サブクラスであるDNAString、 RNAString、AAString クラスの解説をしていきたいと思います。
 
　ありがとうございました。