1介绍

1.1概述

drugTargetInteractions软件包提供了小分子和/或基因/蛋白质标识符集的药物-靶点相互作用的识别实用程序(Wu et al. 2006)。所需的药物-靶点相互作用信息从已下载的SQLite实例中获得ChEMBL数据库(Gaulton et al. 2012;Bento et al. 2014)。ChEMBL被选择用于此目的,因为它为公共领域的药物靶点信息提供了最全面和最好的注释知识资源之一。

1.2安装包

作为Bioconductor封装drugTargetInteraction可以安装与BiocManager:安装()函数。

如果(!requireNamespace("BiocManager", quiet = TRUE)) install.packages("BiocManager")::install("drugTargetInteractions")

或者,该包可以从GitHub安装,如下所示。

devtools::install_github(" girkie -lab/drugTargetInteractions", build_vignettes=TRUE) #从github安装

1.3加载软件包和访问帮助

使用drugTargetInteractions,该包需要在用户的R会话中加载。

library("drugTargetInteractions") #加载包

下面的命令对于列出可用的帮助文件和打开包的小插图非常有用。

library(help="drugTargetInteractions") #列出包信息小插图(topic="drugTargetInteractions", package="drugTargetInteractions") #打开小插图

2工作环境

2.1所需文件及目录

drugTargetInteractions的SQLite实例ChEMBL数据库。本文中的以下代码使用了这个数据库的一个简化版,它足够小,可以包含在这个包中,用于演示其函数的使用。对于真正的药物目标分析工作,重要的是用户下载并解压ChEMBL SQLite数据库的最新版本在这里,然后替换分配给的路径chembldb下面是他们下载到系统中的ChEMBL数据库完整版本的路径。由于ChEMBL的SQLite数据库可以被这个包使用,在Bioconductor上创建ChEMBL SQLite数据库的副本AnnotationHub在这一点上没有必要。通过这种方式,用户可以始终使用ChEMBL的最新或历史版本,而不需要维护镜像实例。

以下genConfig函数调用创建一个列表,其中包含本示例中介绍的示例代码使用的输入和输出目录的路径。对于实际的分析,用户希望自定义这些路径以匹配其系统上的环境。方法生成的所有路径执行函数需要更改,因为它们是特定于处理包的测试数据的(如。玩具ChEMBL SQLite实例)。

Chembldb <- system。resultsPath <- system. db . file("extdata", "chembl_sample.db", package="drugTargetInteractions")file("extdata", "results", package="drugTargetInteractions") config <- genConfig(chemblDbPath=chembldb, resultsPath=resultsPath)

此外,还可以从UniChem动态下载一个查找表(参见网页和相应的ftp站点。此查找表用于drugTargetInteractions在不同的药物数据库中转换化合物标识符。目前,这包括三种类型的化合物标识符:DrugBank、PubChem和ChEBI。

downloadUniChem (config =配置)cmpIdMapping (config =配置)

3.快速产生结果

主要对生成分析结果感兴趣的用户可以跳过以下部分中的技术细节,继续阅读标题为运行一切的工作流

4检索UniProt id

对于一组查询id (如。ENSEMBL基因ID)对应的UniProt ID基于stick ID匹配以及更宽松的基于序列相似性的方法。后一种序列相似度关联是用getUniprotIDs或者是getParalogs函数,分别使用UniProt的UNIREF集群或BioMart的paralog注释。

4.1UniProt的UNIREF集群

UniProt.ws包用于返回一组查询ID(这里是Ensembl基因ID)对应的UniProt ID,基于两种独立的方法:ID映射(IDMs)和序列相似度最近邻(ssnn)使用UNIREF集群。后者由UniProt使用MMSeqs2和Linclust算法生成(Steinegger and Söding 2017;施泰因格和索丁2018)。关于联合国儿童基金会各分组的其他详细资料可供查阅在这里。,可以选择生物、查询ID类型和序列相似度级别taxIdktseq_cluster参数,分别。的seq_cluster参数可以被赋值为:UNIREF100UNIREF90UNIREF50。结果是一个包含两个的列表data.frames。第一个基于idm,第二个基于ssnn。

keys <- c("ENSG00000145700", "ENSG00000135441", "ENSG00000120071") res_list90 <- getUniprotIDs(taxId=9606, kt="ENSEMBL", keys=keys, seq_cluster="UNIREF90")

下面展示了第一个data.frame包含ID映射结果。

library(DT) datatable(res_list90[[1]], options = list(scrollX=TRUE, scrollY="600px", autoWidth =TRUE))

下面展示了如何返回这两个维度data.frames以及如何获取UniProt id作为下游分析步骤所需的字符向量。

sapply(res_list90, dim, simplify=FALSE)
## $ idm ## [1] 18 8 ## ## $ ssnn ## [1] 22 8
sapply(name (res_list90),函数(x)唯一的(na.省略(res_list90[[x]]$ID)))
[1]“a0a669kay2”“d6rjb7”“q8n7z5”“f8vp73”“f8w606”“g8jlq3”“h0yha4”“p78537”“a0a1w2pqv8”“a0a1w2pqt4”“a0a1w2pqt4”“a0a1w2prr3”##[15]“a0a1w2ps83”“a0a3b3it55”“a0a1w2prb5”“a0a087wsv2”“f8vp73”“f8w606”“g8jlq3”##[8]”“f8vnq1”“h0yha4”“a0a1w2ppv8”“a0a1w2pqt4”“a0a1w2prb5”##[15]“a0a1w2prr3”“a0a3b3it55”“a0a1w2pq4”“a0a1w2ppv8”“a0a1w2pqt4”“a0a1w2prb5”“a0a1w2prr3”“a0a3b3it55”“a0a24w2jqf4”“i3l233”##[22]“q7z3b3”

4.2BioMart的假字

以下资料由biomaRt对于一组查询基因,对应的UniProt id及其平行对数。查询的基因可以是“基因名称”或“ensemble bl基因id”智人。结果与idm和ssnn相似getUniprotIDs函数,但不是UNIREF聚类,biomaRt的平行对数被用来获得ssnn。

queryBy <- list(molType="gene", idType="external_gene_name", ids=c("ANKRD31", "BLOC1S1", "KANSL1")) queryBy <- list(molType="gene", idType="ensembl_gene_id", ids=c("ENSG00000145700", "ENSG00000135441", "ENSG00000120071")) res_list <- getParalogs(queryBy)

下面展示了第一个data.frame包含ID映射结果。

library(DT) datatable(res_list[[1]], options = list(scrollX = TRUE, scrollY="400px", autoWidth = TRUE))

下面展示了如何返回这两个维度data.frames以及如何获取UniProt id作为下游分析步骤所需的字符向量。

sapply(res_list, dim, simplify=FALSE)
## $ idm ## [1] 30 5 ## ## $ ssnn ## [1] 33 7
sapply(name (res_list),函数(x)唯一的(na.省略(res_list[[x]]$ID_up_sp)))
“q7z3b3”“p78537”“q8n7z5”## ## $ ssnn# #[1]“q7z3b3”“a0auz9”“p78537”“q8n7z5”“q5jpf3”“a6ql64”“q8n2n9”

5查询药物目标注释

drugTargetAnnot函数返回ChEMBL中可用的一组化合物或基因/蛋白id对应的已知药物靶点注释数据。一个相关的函数叫做getDrugTarget将在随后的小节中进行描述。此方法生成非常相似的结果,但是使用内部预先计算的注释汇总表,这比使用纯SQL语句更不灵活。

5.1使用drugTargetAnnot

drugTargetAnnot函数使用SQL语句查询ChEMBL数据库,而不依赖于预先计算的注释表。

5.1.1使用复合id查询

queryBy <- list(molType="cmp", idType="chembl_id", ids=c("CHEMBL17", "CHEMBL19", "CHEMBL1201117", "CHEMBL25", "nomatch", "CHEMBL1742471")) qresult1 <- drugTargetAnnot(queryBy, config=config)
library(DT) datatable(qresult1, options = list(scrollX = TRUE, scrollY="600px", autoWidth = TRUE))

5.1.2使用蛋白质id查询

queryBy <- list(molType="protein", idType="UniProt_ID", ids=c("P43166", "P00915")) qresult2 <- drugTargetAnnot(queryBy, config=config)
library(DT) datatable(qresult2, options = list(scrollX = TRUE, scrollY="600px", autoWidth = TRUE))

5.1.3使用基因id查询

下面返回一组查询Ensembl基因id的药物目标注释。为此,使用IDM和SSNN方法将Ensembl基因id翻译成UniProt id。

keys <- c("ENSG00000120088", "ENSG00000135441", "ENSG00000120071") res_list90 <- getUniprotIDs(taxId=9606, kt="ENSEMBL", keys=keys, seq_cluster="UNIREF90")
id_list <- sapply(names(res_list90), function(x) unique(na.省略(res_list90[[x]]$ID)))

接下来,使用IDM或SSNN方法为Uniprot id返回药物目标注释。下面以SSNN方法的UniProt id为例进行说明。注意,为了将上游的Ensembl基因ID包含在最终结果表中,下面的Ensembl ID折叠步骤通过atapply是必要的,因为偶尔UniProt id被分配到几个Ensembl基因id (如。最近的基因复制)。

queryBy <- list(molType="protein", idType="UniProt_ID", ids=id_list[[2]]) qresultSSNN <- drugTargetAnnot(queryBy, config=config) ensidsSSNN <- tapply(res_list90[[2]]$ENSEMBL, res_list90[[2]]$ID, paste, collapse=", ") qresultSSNN <- data.frame(Ensembl_IDs=ensidsSSNN[as.character(qresultSSNN$QueryIDs)], qresultSSNN)
library(DT) datatable(qresultSSNN, options = list(scrollX = TRUE, scrollY="600px", autoWidth = TRUE))

5.2使用getDrugTarget

getDrugTarget函数生成的结果与drugTargetAnnot,但依赖于预先计算的查询表(这里drugTargetAnnot.xls).

5.2.1使用复合id查询

id_mapping <- c(chembl="chembl_id", pubchem="PubChem_ID", uniprot="UniProt_ID", drugbank="DrugBank_ID") queryBy <- list(molType="cmp", idType="pubchem", ids=c("2244", "65869", "2244")) queryBy <- list(molType="protein", idType="uniprot", ids=c("P43166", "P00915", "P43166")) queryBy <- list(molType="cmp", idType="drugbank", ids=c("DB00945", "DB01202")) #qresult3 <- getDrugTarget(queryBy= " queryBy, id_mapping= " id_bank_id ")columns=c(1,5,8,16,16,39,46:53),config=config) qresult3 <- getDrugTarget(queryBy=queryBy, id_mapping=id_mapping, columns=c(1,5,8,16,17),config=config)
library(DT) datatable(qresult3, options = list(scrollX = TRUE, scrollY="600px", autoWidth = TRUE))

5.2.2使用蛋白质id查询

queryBy <- list(molType="protein", idType="chembl", ids=c("CHEMBL25", "nomatch", "CHEMBL1742471")) #qresult4 <- getDrugTarget(queryBy=queryBy, id_mapping, columns=c(1,5,8,16,17,39,46:52),config=config) qresult4 <- getDrugTarget(queryBy=queryBy, id_mapping=id_mapping, columns=c(1,5,8,16,17),config=config)
library(DT) datatable(qresult4, options = list(scrollX = TRUE, scrollY="600px", autoWidth = TRUE))

6查询生物测定数据

drugTargetBioactivity函数返回ChEMBL中可用的一组化合物或基因/蛋白质id的相应生物测定数据。

6.1使用复合id查询

化合物id查询示例。

queryBy <- list(molType="cmp", idType="DrugBank_ID", ids=c("DB00945", "DB00316", "DB01050")) qresultBAcmp <- drugTargetBioactivity(queryBy, config=config)
library(DT) datatable(qresultBAcmp, options = list(scrollX = TRUE, scrollY="600px", autoWidth = TRUE))

6.2使用蛋白质id查询

蛋白质id查询示例。注意,Ensembl基因到UniProt ID的映射是从上面得到的,并存储在命名的字符向量中ensidsSSNN

queryBy <- list(molType="protein", idType="uniprot", ids=id_list[[1]]) qresultBApep <- drugTargetBioactivity(queryBy, config=config) qresultBApep <- data.frame(Ensembl_IDs=ensidsSSNN[as.character(qresultBApep$UniProt_ID)], qresultBApep)
library(DT) datatable(qresultbep, options = list(scrollX = TRUE, scrollY="600px", autoWidth = TRUE))

7运行一切的工作流

本节解释如何使用几个方便的元函数运行上述所有药物-靶标相互作用分析步骤。主要对快速生成分析结果感兴趣的用户可以只关注这个部分。

7.1ID映射

getSymEnsUp函数返回一个包含ENSEMBL基因id、基因名称/符号、UniProt id和ENSEMBL蛋白质id的映射表,用于查询基因或蛋白质id。函数在内部使用ensembldb包中。它的结果在一个列表中返回,其中第一个槽包含ID映射表,而随后的槽包括相应的命名字符向量:ens_gene_idup_ens_id,up_gene_id。目前支持以下查询idgetSymEnsUpGENE_NAMEENSEMBL_GENE_IDUNIPROT_ID

安装7.1.1基因名称查询

gene_name <- c("CA7", "CFTR") idMap <- getSymEnsUp(EnsDb="EnsDb. hsapiens . "v86", ids=gene_name, idtype=" gene_name ") ens_gene_id <- idMap$ens_gene_id ens_gene_id . v86", ids=gene_name, idtype=" gene_name "
## eng00000168748 eng00000001626 ##“ca7”“cftr”

7.1.2使用ENSEBML基因id查询

ensembl_gene_id <- c("ENSG00000001626", "ENSG00000168748") idMap <- getSymEnsUp(EnsDb="EnsDb. hsapiens . endb ")v86", ids=ensembl_gene_id, idtype=" ensembl_gene_id ") ens_gene_id <- idMap$ens_gene_id . v86", ids= " ensembl_gene_id "

7.1.3查询UniProt id

uniprot_id <- c("P43166", "P13569") idMap <- getSymEnsUp(EnsDb="EnsDb. hsapiens . "v86", ids=uniprot_id, idtype=" uniprot_id ") ens_gene_id <- idMap$ens_gene_id . v86", ids=uniprot_id, idtype=" uniprot_id "

7.2检索UniProt id

可以从UniProt的UNIREF集群或BioMart的paralog注释中获得完美匹配和最近邻居UniProt id。

7.2.1UNIREF集群

,得到上述ENSEMBL基因id对应的IDM和SSNN UniProt idgetUniprotIDs函数。这一步很慢,因为查询必须使用chunksize = 1以便可靠地跟踪查询结果中的ENSEMBL基因ID信息。

res_list90 <- getUniprotIDs(taxId=9606, kt="ENSEMBL", keys=names(ens_gene_id), seq_cluster="UNIREF90", chunksize=1) sapply(res_list90, dim)

7.2.2BioMart Parlogs

在这里,使用的方法获得了上述ENSEMBL基因id对应的完全匹配(IDM)和拟合(SSNN) UniProt idgetParalogs函数。后者比前者快得多getUniprotIDs,也涵盖了更广泛的进化距离。因此,它可能是许多用例的首选方法。

queryBy <- list(molType="gene", idType="ensembl_gene_id", ids=names(ens_gene_id)) res_list <- getparallogs (queryBy)
酸式焦磷酸钠(res_list dim)
## idm SSNN ## [1,] 13 127 ## [2,] 5

7.3药物的数据

药物靶标注释和生物测定数据都是通过称为的元函数获得的runDrugTarget_Annot_Bioassay在内部使用主要的处理功能drugTargetAnnotdrugTargetBioactivity。它将结果组织成一个带有注释和生物测定数据的列表(data.frames)分别在第一及第二档位。重要的是,IDM和SSNN UniProt id的结果被组合在一个表中,其中重复的行已被删除。要在结果表中跟踪使用了哪种方法获取UniProt id,可以使用IDM_Mapping_Type已添加列。注意,SSNN行中的基因id有字符串Query_以表明它们不一定是编码相应行中列出的SSNN UniProt蛋白的基因。相反,它们是编码用于搜索ssnn的查询蛋白的基因。

drug_target_list <- runDrugTarget_Annot_Bioassay(res_list=res_list, up_col_id="ID_up_sp", ens_gene_id, config=config) sapply(drug_target_list, dim)
##注释生物测定## [1,]55 35 ## [2,]18 17

查看注释结果槽内容:

datatable(drug_target_list$Annotation, options = list(scrollX = TRUE, scrollY="600px", autoWidth = TRUE))

生物测定结果槽查看内容(限前500行):

datatable(drug_target_list$Bioassay[1:500,], options = list(scrollX = TRUE, scrollY="600px", autoWidth = TRUE))

7.4药物的频率

下面生成一个包含药物目标频率信息的汇总表。

df <- drug_target_list$Annotation df[,"GeneName"] <- gsub("Query_", "", as.character(df$GeneName)) stats <- tapply(df$CHEMBL_CMP_ID, as.factor(df$GeneName), function(x) unique(x)) stats <- sapply(names(stats), function(x) stats[[x]]][nchar(stats[[x]]) > 0]) stats <- sapply(names(stats), function(x) stats[[x]]][!is.na(stats[[x]])]) statsDF <- data.frame(GeneNames=names(stats), Drugs=sapply(stats, paste, collapse=", "), N_Drugs=sapply(stats, length))

打印药物目标频率表。

datatable(statsDF, options = list(scrollX = TRUE, scrollY="150px", autoWidth = TRUE))

7.5将结果写入表格文件

生物测定数据和注释drug_target_list对象可以导出到单独的表格文件,如下所示。

写。table(drugg_target_list $Annotation, "DrugTargetAnnotation.xls", row.names=FALSE, quote=FALSE, na="", sep="\t") write。table(drugtarget_list $Bioassay, "DrugTargetBioassay.xls", row.names=FALSE, quote=FALSE, na="", sep="\t") write。table(statDF, "statDF.xls", row.names=FALSE, quote=FALSE, na="", sep="\t")

8会话信息

sessionInfo ()
## R正在开发中(不稳定)(2022-10-25 r83175) ##平台:x86_64-pc-linux-gnu(64位)##运行在Ubuntu 22.04.1 LTS ## ##矩阵产品:默认## BLAS: /home/biocbuild/bbs-3.17-bioc/R/lib/libRblas。so ## LAPACK: /usr/lib/x86_64-linux-gnu/ LAPACK /liblapack.so.3.10.0 ## ## locale: ## [1] LC_CTYPE=en_US。UTF-8 LC_NUMERIC=C LC_TIME=en_GB ## [4] LC_COLLATE=C LC_MONETARY=en_US。utf - 8 LC_MESSAGES = en_US。UTF-8 ## [7] LC_PAPER=en_US。UTF-8 LC_NAME=C LC_ADDRESS= c# # [10] lc_phone =C LC_MEASUREMENT=en_US。UTF-8 LC_IDENTIFICATION=C ## ##附加的基本包:## [1]stats4 stats graphics grDevices utils datasets methods基础## ##其他附加包:[1] EnsDb.Hsapiens.v86_2.99.0 ensembldb_2.23.0 AnnotationFilter_1.23.0 ## [7] GenomicRanges_1.51.0 GenomeInfoDb_1.35.0 IRanges_2.33.0 ## [10] S4Vectors_0.37.0 BiocGenerics_0.45.0 DT_0.26 ## [13] drugTargetInteractions_1.7.0 BiocStyle_2.27.0 ## ##通过命名空间加载(并且没有附加):## [1] DBI_1.1.3 bitops_1.0-7 biomaRt_2.55.0 ## [4] rlang_1.0.6 magrittr_2.0.3 matrixStats_0.62.0 ## [7] compiler_4.3.0 RSQLite_2.2.18 png_0.1-7 ## [10] vctrs_0.5.0 string_1 .4.1 ProtGenerics_1.31.0 ## [13] pkgconfig_2.0.3 crayon_1.5.2 fastmap_1.1.0 ## [16] dbplyr_2.2.1 XVector_0.39.0 ellipsis_0.3.2 ## [19] utf8_1.2.2 Rsamtools_2.15.0 rmarkdown_2.17 ## [22] purrr_0.3.5 bit_4.0.4 xfun_0.34 ## [25] zlibbioc_1.45.0 cachem_1.0.6 jsonlite_1.8.3 ## [28] progress_1.2.2 blob_1.2.3 DelayedArray_0.25.0 ## #[31] BiocParallel_1.33.0 parallel_4.3.0 prettyunits_1.1.1 ## [34] R6_2.5.1 bslib_0.4.0 stringi_1.7.8 ## [37] rtracklayer_1.59.0 jquerylib_0.1.4 Rcpp_1.0.9 ## [40] bookdown_0.29 assertthat_0.2.1 SummarizedExperiment_1.29.0 ## [43] knitr_1.40 BiocBaseUtils_1.1.0 Matrix_1.5-1 ## [46] tidyselect_1.2.0 yaml_2.3.6 codetools_0.2-18 ## [49] curl_4.3.3 rjsoncons_1.0.0 lattice_0.20-45 ## [52] tibble_3.1.8 withr_2.5.0 KEGGREST_1.39.0 ## [55] evaluate_0.17 BiocFileCache_2.7.0 xml2_1.3.3 ## [58] Biostrings_2.67.0 pillar_1.8.1 BiocManager_1.30.19 ## [61] filelock_1.0.2 MatrixGenerics_1.11.0 generics_0.1.3 ## [64] RCurl_1.98-1.9 hms_1.1.2 glue_1.6.2 ## [67] lazyeval_0.2.2 tools_4.3.0 BiocIO_1.9.0 ## [70] GenomicAlignments_1.35.0 XML_3.99-0.12 grid_4.3.0 ## [73] crosstalk_1.2.0 UniProt.ws_2.39.0 GenomeInfoDbData_1.2.9 ## [76] restfulr_0.0.15 cli_3.4.1 rappdirs_0.3.3 ## [79] fansi_1.0.3 dplyr_1.0.10 sass_0.4.2 ## [82] digest_0.6.30 rjson_0.2.21 htmlwidgets_1.5.4 ## [85] memoise_2.0.1 htmltools_0.5.3 lifecycle_1.0.3 ## [88] httr_1.4.4 bit64_4.0.5

参考文献

Bento, A patrq ' cia, Anna Gaulton, Anne Hersey, Louisa J Bellis, Jon Chambers, Mark Davies, Felix A Krüger等。2014。“ChEMBL生物活性数据库:更新。”核酸测定。42(数据库问题):D1083-90。https://doi.org/10.1093/nar/gkt1031

高顿,安娜,路易莎·J·贝利斯,帕特丽夏·本托,乔恩·钱伯斯,马克·戴维斯,安妮·赫西,伊冯·莱特等,2012。ChEMBL:用于药物发现的大规模生物活性数据库。核酸测定。40(数据库问题):D1100-7。https://doi.org/10.1093/nar/gkr777

斯坦格,马丁和约翰内斯Söding。2017.“MMseqs2能够对大量数据集进行敏感蛋白质序列搜索分析。”生物科技Nat。》。35(11): 1026-8。https://doi.org/10.1038/nbt.3988

马丁·施泰因格和约翰内斯·索丁,2018。“在线性时间内聚类巨大的蛋白质序列集。”Commun Nat。9(1): 2542。https://doi.org/10.1038/s41467-018-04964-5

吴昌华,R Apweiler, A Bairoch, D A Natale, W C Barker, B Boeckmann, S Ferro等。2006。“通用蛋白质资源(UniProt):一个不断扩展的蛋白质信息宇宙。”核酸测定。34(数据库问题):D187-D191。https://doi.org/10.1093/nar/gkj161