はじめに
メタボローム解析をして得られた、HMDB IDを基に、SDF形式のライブラリの作成に迫られたので、Rを使って作成します。
下準備
はじめに、ライブラリに含める化合物のリストを作成します。具体的には、下記のようなHMDB IDを列挙したテキストファイルです。
実際には、メタボローム解析結果のExcelファイルから、HMDB IDの列をコピーし、テキストエディタに張り付けて終了です。1行目には、ヘッダーを残しておくと、後の処理が楽になります。
HMDB
HMDB0012497
HMDB0031641
HMDB0013749
HMDB0033529
HMDB0032330
HMDB0032330
HMDB0094691
HMDB0034301
HMDB0034301
HMDB0000039
HMDB0000039
HMDB IDリストの読み込み
早速、上記のファイルを読み込みます。あいにくtinyverse脳なので、脊髄反射でreadr
パッケージを使います。
library(readr)
hmdb_ids <- read_csv("hmdb_ids.txt")
ダウンロード用の自作関数
SDFファイルをHMDBからダウンロードするための自作関数を作ります。先ほど作成したHMDB IDのリストから、HMDB上にあるSDFファイルのurlを作成し、ファイルをダウンロードする作戦です。
普通ならHMDB ID毎に、SDFファイルを作成するのでしょうが、今回は1ファイルに複数の化合物情報を含んだライブラリとしてのSDFファイルを作成します。そのため、download.file()
のパラメータをmode="a"
とし、指定したファイルlibrary.sdf
にダウンロードしたデータを追記してていきます。
まれに、HMDB上にSDFファイルが存在しない場合があるのですが、その際にエラーが出て処理が止まってしまわないようtry()
を挟んで、処理が継続されるようにしています。
download_sdf <- function(hmdb_id) {
url <- paste0("http://www.hmdb.ca/structures/metabolites/", hmdb_id, ".sdf")
try(
download.file(url, "library.sdf", method="libcurl", mode="a"),
silent=TRUE
)
Sys.sleep(5)
}
最後にダウンロード
purrr::map
を使って、ダウンロードします。sapply()
でもいいと思います。
library(purrr)
map(hmdb_ids$HMDB, download_sdf)
ダウンロードが終わると、こんな感じでSDFライブラリが作成されます。一部アノテーション情報は省略しています。
Structure #1
Mrv0541 02241206562D
5 5 0 0 0 0 999 V2000
0.5678 1.1143 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.2352 0.6294 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-0.0997 0.6294 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
0.9803 -0.1553 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
0.1553 -0.1553 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0 0 0 0
1 3 1 0 0 0 0
2 4 1 0 0 0 0
3 5 2 0 0 0 0
4 5 1 0 0 0 0
M END
...
$$$$
Mrv0541 02241218152D
5 5 0 0 0 0 999 V2000
1.5202 0.2371 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
0.6952 0.2371 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
0.4403 1.0217 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.1077 1.5066 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
1.7752 1.0217 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0 0 0 0
2 3 1 0 0 0 0
3 4 1 0 0 0 0
4 5 1 0 0 0 0
1 5 1 0 0 0 0
M END
...
$$$$
Mrv0541 02241217062D
6 6 0 0 0 0 999 V2000
-0.2471 0.6600 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
-1.0721 0.4125 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.0721 -0.4125 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-0.2471 -0.6600 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
0.2471 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.0721 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0 0 0 0
1 5 1 0 0 0 0
2 3 2 0 0 0 0
3 4 1 0 0 0 0
4 5 2 0 0 0 0
5 6 1 0 0 0 0
M END
...