LoginSignup
0
0

More than 3 years have passed since last update.

HMDBからSDFファイルをダウンロードして自作ライブラリを作成

Last updated at Posted at 2019-11-01

はじめに

メタボローム解析をして得られた、HMDB IDを基に、SDF形式のライブラリの作成に迫られたので、Rを使って作成します。

下準備

はじめに、ライブラリに含める化合物のリストを作成します。具体的には、下記のようなHMDB IDを列挙したテキストファイルです。
実際には、メタボローム解析結果のExcelファイルから、HMDB IDの列をコピーし、テキストエディタに張り付けて終了です。1行目には、ヘッダーを残しておくと、後の処理が楽になります。

hmdb_ids.txt
HMDB
HMDB0012497
HMDB0031641
HMDB0013749
HMDB0033529
HMDB0032330
HMDB0032330
HMDB0094691
HMDB0034301
HMDB0034301
HMDB0000039
HMDB0000039

HMDB IDリストの読み込み

早速、上記のファイルを読み込みます。あいにくtinyverse脳なので、脊髄反射でreadrパッケージを使います。

sdf.r
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()を挟んで、処理が継続されるようにしています。

sdf.r
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()でもいいと思います。

sdf.r
library(purrr)
map(hmdb_ids$HMDB, download_sdf)

ダウンロードが終わると、こんな感じでSDFライブラリが作成されます。一部アノテーション情報は省略しています。

library.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

...
0
0
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
0
0