R语言实现分子信息获取
时间:2022-07-25
本文章向大家介绍R语言实现分子信息获取,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
同时其提供了相对应的JAVA接口供各用户使用。今天就给大家介绍下在R语言中是如何利用其接口进行相应的化合物数据获取的。
首先,我们看下需要安装的包:
install.packages('rcdk')
接下来我们直接通过实例来看下此包的使用:
1. 数据的输入与输出
##数据载入
Dir1=system.file("molfiles","kegg.sdf", package = "rcdk")
Dir2=system.file("molfiles","dhfr00008.sdf", package = "rcdk")
mols <- load.molecules( c(Dir1, Dir2) )
当单个分子sdf文件太大时,我们为了防止内存溢出,那么我们可以遍历读取:
##遍历读取数据
iter <- iload.molecules(Dir1,type='sdf')
while(iter$hasNext()) {
mol<- iter$nextElem()
set.property(mol, 'cdk:Title', 'A')
print(get.property(mol,"cdk:Title"))
}
##单个分子的解析读取,当然也可以直接读取多个分子
smile <- 'c1ccccc1CC(=O)C(N)CC1CCCCOC1'
mol <- parse.smiles(smile)[[1]]
get.smiles(mol)
# get.smiles(mols[[1]])
##多个SMILE结构数据的读取
options("java.parameters"=c("-Xmx4000m"))
library(rcdk)
for (smile in smiles) {
m<- parse.smiles(smile)
## perform operations on this molecule
.jcall("java/lang/System","V","gc")
gc()
}
##分子的输出,如果参数together=FALSE,则挨个输出分子到sdf文件
write.molecules(mols,filename='mymols.sdf')
2. 分子结构的获取
##SMILE转化为2D坐标
m <- parse.smiles('CCC')[[1]]
m <- generate.2d.coordinates(m)
##分子信息:绝对立体配置、增强立体功能、原子标签、波动键索引、环状立体键信息和反应片段级分组信息输出
get.smiles(m,smiles.flavors(c('CxSmiles')))
##SMILE坐标信息获取
get.smiles(m,smiles.flavors(c('CxCoordinates')))
3. 分子结构的可视化
###坐标系中添加分子结构
img <-view.image.2d(parse.smiles("B([C@H](CC(C)C)NC(=O)[C@H](CC1=CC=CC=C1)NC(=O)C2=NC=CN=C2)(O)O")[[1]])
plot(1:10, 1:10, pch=19)
rasterImage(img, 1,6, 5,10)
4. 分子构造的解析
##原子骨架的获取
mol <-parse.smiles('c1ccccc1C(Cl)(Br)c1ccccc1')[[1]]
atoms <- get.atoms(mol)
bonds <- get.bonds(mol)
cat('No. of atoms =', length(atoms), 'n')
5. 分子描述信息(此包的核心部分)
##列举此包可获取的分子描述信息属性,包括了拓扑,构造,几何,电子和混合形式。
dc <- get.desc.categories()
##获取单个描述的具体信息名称
dn <- get.desc.names(dc[4])
###计算描述中的各属性值
aDesc <- eval.desc(mol, dn[4])
allDescs <- eval.desc(mol, dn)
##获取所有描述属性的集合
descNames <-unique(unlist(sapply(get.desc.categories(), get.desc.names)))
###通过描述信息集合获取对应的分子属性
data(bpdata)
mols <- parse.smiles(bpdata[,1])
descNames <- c(
'org.openscience.cdk.qsar.descriptors.molecular.KierHallSmartsDescriptor',
'org.openscience.cdk.qsar.descriptors.molecular.APolDescriptor',
'org.openscience.cdk.qsar.descriptors.molecular.HBondDonorCountDescriptor')
descs <- eval.desc(mols, descNames)
得到上面的矩阵,那么我们就可以进行下面的建模型,分析了。此包也给出了两个例子,我们直接看下:
1. 线性回归模型的构建
###数据清洗
descs <- descs[, !apply(descs, 2,function(x) any(is.na(x)) )]
descs <- descs[, !apply( descs, 2,function(x) length(unique(x)) == 1 )]
r2 <- which(cor(descs)^2 > .6,arr.ind=TRUE)
r2 <- r2[ r2[,1] > r2[,2] , ]
descs <- descs[, -unique(r2[,2])]
###构建模型
model <- lm(BP ~ khs.sCH3 + khs.sF +apol + nHBDon, data.frame(bpdata, descs))
summary(model)
##可视化模型预测结果
plot(bpdata$BP, predict(model, descs),
xlab="Observed BP", ylab="Predicted BP",
pch=19, xlim=c(100, 700), ylim=c(100, 700))
abline(0,1, col='red')
2. 基于分子指纹的分层聚类分析,首先看下分子指纹的类型:
##获取分子指纹,此处类型为circular
data(bpdata)
mols <- parse.smiles(bpdata[,1])
fps <- lapply(mols, get.fingerprint,type='circular')
##计算距离矩阵
fp.sim <-fingerprint::fp.sim.matrix(fps, method='tanimoto')
fp.dist <- 1 - fp.sim
##可视化结果
cls <- hclust(as.dist(fp.dist))
plot(cls, main='A Clustering of the BPdataset', labels=FALSE)
当然,分子指纹还有另外一个功能,那就是分子检索,通过指纹的相似的进行分子的检索,我们直接看下实例:
query.mol <- parse.smiles('CC(=O)')[[1]]
target.mols <- parse.smiles(bpdata[,1])
query.fp <- get.fingerprint(query.mol,type='circular')
target.fps <- lapply(target.mols,get.fingerprint, type='circular')
sims <- data.frame(sim=do.call(rbind,lapply(target.fps,
fingerprint::distance,
fp2=query.fp, method='tanimoto')))
subset(sims, sim >= 0.3)
- fms4 p2p:图片分享
- 老域名新用的优缺点分析
- 不用临时变量,交换二个整型变量的值
- monoTouch开发(1):win7 + vmware下安装mac os
- 数据结构C#版笔记--队列(Quene)
- 数据结构C#版笔记--堆栈(Stack)
- MySQL基础入门-第一课 新建数据库(linux版本)
- 2017年度最不安全密码报告,看看你的密码安全吗?
- 数据结构C#版笔记--顺序表(SeqList)
- 数据结构C#版笔记--单链表(LinkList)
- 操作系统 页式存储 页与块之间的关系详解
- 数据结构C#版笔记--双向链表(DbLinkList)
- 斐波那契数列与IE9
- DateTime.ToString()输出"年/月/日 时:分:秒"的格式
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- String及StringTable(三):StringBuilder源码解读
- UidGenerator:百度开源的分布式ID服务(解决了时钟回拨问题)
- String及StringTable(四):StringBuffer与StringBuilder对比
- Apache James 2.3.2.1 邮箱服务搭建
- SpringBoot实现微信小程序登录的完整例子
- String及StringTable(五):java8的新工具类StringJoiner
- spring security oauth2使用refresh_token报错UserDetailsService is required
- 你所不知道的React| 趋势解读、底层逻辑、学习路径、实战应用
- js中setTimeout的用法和JS计时器setTimeout与setInterval方法的区别和confirm方法
- TKinter Label 和 Button
- Java类如何防止被实例化
- PHP中的json_encode和json_decode
- Java重写equals和hashCode方法
- upload-labs第11~12关 00截断
- java 踩雷日记--new