R语言实现分子SDF文件操作

2019-12-04 12:52:44 浏览数 (1)

我们今天给大家介绍一个可以在R语言中对SDF文件进行操作的R包ChemmineR,当然这个包还包含了很多对分子分析的算法,需要通过Bioconductor安装:

代码语言:javascript复制
BiocManager::install("ChemmineR")

如果想支持格式的转化还需要安装:

代码语言:javascript复制
BiocManager::install("ChemmineOB")

具体的概况如下:

首先我们看下数据的读入函数read.SDFset,这个函数类似read.csv或者read.table,所以我们就不深究了,我们主要看下如何读取读入后的数据。

载入数据:

代码语言:javascript复制
a=read.SDFset("http://faculty.ucr.edu/~tgirke/Documents/R_BioCond/Samples/sdfsample.sdf")

其中获取详细信息的函数如下:

1. atomblock 获取每一个化合物的原子矩阵。实例

代码语言:javascript复制
  atomblock(a[1])

2. datablock 获取每一个化合物的所有信息。实例:

代码语言:javascript复制
datablock(a[1])
代码语言:javascript复制
 datablock(a[1])$CMP1[1:4]

3. cid 获取每一个化合物的排序的ID,方便datablock读取其详细信息。实例:

代码语言:javascript复制
cid(a)

4. sdfid 获取化合物在数据中标注的ID。实例:

代码语言:javascript复制
sdfid(a)

5. makeUnique 主要用来检测数据的ID是否重复,也就是可以看一个sdf文件中是否有重复的数据。

6. datablock2ma 将SDF文件转化为矩阵数据。实例:

代码语言:javascript复制
blockmatrix <- datablock2ma(datablocklist=datablock(a))
代码语言:javascript复制
 numchar <-splitNumChar(blockmatrix=blockmatrix) #分割字符串和数值型的数据

7. grepSDFset 检索SDF文件。检索的区域包括header, atomblock, bondblock 或者datablock;检索的模式包括index(返回位置)、subset(返回数据列表)。实例:

代码语言:javascript复制
grepSDFset("650001", a, field="datablock", mode="index")

接下来我们看另一个重要的功能,获取分子式、分子量以及各原子数量:

代码语言:javascript复制
propma <- data.frame(MF=MF(a), MW=MW(a),atomcountMA(a))

当然我们也可以输出我们的分子结构:

代码语言:javascript复制
plot(a[1:4], print=FALSE)

或者写入新的sdf文件:

代码语言:javascript复制
write.SDF(at[1:4],file="sub.sdf", sig=F)

接下来就是对分子的处理,首先我们看下分子相似性以及聚类分析,直接看实例:

代码语言:javascript复制
apset <- sdf2ap(a)# 创建数据库:data(apset) # 载入数据 cmp.search(apset, apset[1], type=3, cutoff =0.3, quiet=TRUE)

cmp.search具体函数参数如下:

Query 指我们想要检索的分子。

Cutoff 相似打分

接下来看下聚类函数cmp.cluster其中主要的是cutoff的两个分子相似性的最小值设置,直接看实例:

代码语言:javascript复制
cmp.cluster(db=apset, cutoff = c(0.65,0.5), quiet=TRUE)[1:4,]

CLSZ代表每一聚类的化合物数量,CLID指的类的ID。

基于Openbable的分子指纹计算以及相似性分析我们不在深入探讨,有兴趣的可以接着研究。

欢迎大家学习交流!

0 人点赞