はじめに
ケモインフォマティックの分野では、有機化合物のSMILES表記がよく用いられており、分子の構造などを数値化した分子記述子や、分子の部分構造などの有無を0/1のビットで表記したフィンガープリントなどを入手する、構造式を表示するなどで活用されています。
このSMILES表記はPubchemなどのサイトや、ChemDrawなどのソフトウェアで入手することが可能ですが、手元に化合物のCAS番号の情報や化合物名などがあった時に効率よくSMILESが入手できないかと思って調べたところ、Rのwebchemパッケージで簡単に行えることが分かりましたので、自分の備忘録として記事に残したいと思います。
目的
Rを使って、手元のCAS番号からSMILESを入手して、rcdkパッケージやfingerprintパッケージなどで使用可能なSMILESのオブジェクトを作成する。
方法
Rのwebchemパッケージを使用します。
webchemパッケージはPubchemなどの化学物質に関するウェブサイトの情報をRやり取りすることができます。
色々な情報を検索して、Rのオブジェクトとして活用できます。
パッケージで使用する関数はcir_query()で、cir_query(identifier, representation)のように、入力する情報をidentifierとして(今回の場合はCAS番号)を、出力したい情報をrepresentation (今回の場合はSMILES)に指定します。
identifierとrepresentationには以下の情報が使用できます。
identifier
: Chemical Names, IUPAC names, CAS Numbers, SMILES strings, IUPAC InChI/InChIKeys, NCI/CADD Identifiers, CACTVS HASHISY, NSC number, PubChem SID, ZINC Code, ChemSpider ID, ChemNavigator SID, eMolecule VID.
representation:
'smiles'(SMILES strings), 'names' (Names), 'cas' (CAS numbers), 'stdinchikey' (Standard InChIKey), 'stdinchi' (Standard InChI), 'ficts' (FICTS Identifier), 'ficus' (FICuS Indetifier), 'uuuuu' (uuuuu Identifier), 'mw' (Molecular weight), 'monoisotopic_mass' (Monoisotopic Mass), 'formula' (Chemical Formula), 'chemspider_id' (ChemSpider ID), 'pubchem_sid' (PubChem SID), 'chemnavigator_sid' (ChemNavigator SID), 'h_bond_donor_count' (Number of Hydrogen Bond Donors), 'h_bond_acceptor_count' (Number of Hydrogen Bond Acceptors), 'h_bond_center_count' (Number of Hydrogen Bond Centers), 'rule_of_5_violation_count' (Number of Rule of 5 Violations), 'rotor_count' (Number of Freely Rotatable Bonds), 'effective_rotor_count' (Number of Effectively Rotatable Bonds), 'ring_count' (Number of Rings), 'ringsys_count' (Number of Ring Systems), 'xlogp2' (octanol-water partition coefficient), 'aromatic' (is the compound aromatic), 'macrocyclic' (is the compound macrocyclic), 'heteroatom_count' (heteroatom count), 'hydrogen_atom_count' (H atom count), 'heavy_atom_count' ( Heavy atom count), 'deprotonable_group_count' (Number of deprotonable groups), 'protonable_group_count' (Number of protonable groups).
実装例
#webchemパッケージのインストールとライブラリの読み込み
install.packages("webchem")
library(webchem)
#CAS番号のオブジェクトを作成
casnr <- c("2051-60-7","2051-61-8")
#cir_query()関数でCAS番号からSMILESを入手する
CAS.SMILES <- cir_query(casnr, "smiles")
#入手できた情報の確認
CAS.SMILES
> CAS.SMILES
# A tibble: 2 × 2
query smiles
<chr> <chr>
1 2051-60-7 Clc1ccccc1c2ccccc2
2 2051-61-8 Clc1cccc(c1)c2ccccc2
#作成されたオブジェクトの種類を確認
names(CAS.SMILES)
> names(CAS.SMILES)
[1] "query" "smiles"
#SMILESのみをオブジェクトに保存
SMILES.only <- CAS.SMILES$smiles
SMILES.only
> SMILES.only
[1] "Clc1ccccc1c2ccccc2" "Clc1cccc(c1)c2ccccc2"
公共のWebサービスを使用するため、一度に多くの化合物を使用するとサーバーへの負担が大きくなり、応答時間が遅くなってタイムアウトするだけでなく、他のユーザーへ迷惑をかけてしまいます。
サーバーへの負担を軽減するためにも、一度に多くの化合物を検索するのではなく、検索する情報を分割して、何度かに分けて検索をすることをお勧めします。
参考サイト
https://cran.r-project.org/web/packages/webchem/index.html
https://www.rdocumentation.org/packages/webchem/versions/1.3.0/topics/cir_query