R获取指定GO term和KEGG pathway的gene list基因集
clusterProfiler没有显性的接口,但是可以直接扣取clusterProfiler里的函数。
核心函数就是get_GO_data
- GO_DATA <- get_GO_data("org.Hs.eg.db", "BP", "SYMBOL")
可以看到输入的是GO数据库,选定类别,基因名字类型,输出的就是整个数据库。
但是想调用这个函数没那么简单,得导入一系列的基础函数。
一个常见的任务就是获取GO数据库里所有的cell cycle相关的基因,这需要从我们的基因集里移除。
有了这个函数,我们就可以这么做了,两句R代码搞定。
- cellCycleGO <- names(GO_DATA$PATHID2NAME[grep("cell cycle|DNA replication|cell division|segregation", GO_DATA$PATHID2NAME)])
- cellCycleGene <- unique(unlist(GO_DATA$PATHID2EXTID[cellCycleGO]))
- print(length(cellCycleGene))
- library(DOSE)
- library(GOSemSim)
- library(clusterProfiler)
- library(org.Hs.eg.db)
- #
- get_GO_data <- function(OrgDb, ont, keytype) {
- GO_Env <- get_GO_Env()
- use_cached <- FALSE
- if (exists("organism", envir=GO_Env, inherits=FALSE) &&
- exists("keytype", envir=GO_Env, inherits=FALSE)) {
- org <- get("organism", envir=GO_Env)
- kt <- get("keytype", envir=GO_Env)
- if (org == DOSE:::get_organism(OrgDb) &&
- keytype == kt &&
- exists("goAnno", envir=GO_Env, inherits=FALSE)) {
- ## https://github.com/GuangchuangYu/clusterProfiler/issues/182
- ## && exists("GO2TERM", envir=GO_Env, inherits=FALSE)){
- use_cached <- TRUE
- }
- }
- if (use_cached) {
- goAnno <- get("goAnno", envir=GO_Env)
- } else {
- OrgDb <- GOSemSim:::load_OrgDb(OrgDb)
- kt <- keytypes(OrgDb)
- if (! keytype %in% kt) {
- stop("keytype is not supported...")
- }
- kk <- keys(OrgDb, keytype=keytype)
- goAnno <- suppressMessages(
- select(OrgDb, keys=kk, keytype=keytype,
- columns=c("GOALL", "ONTOLOGYALL")))
- goAnno <- unique(goAnno[!is.na(goAnno$GOALL), ])
- assign("goAnno", goAnno, envir=GO_Env)
- assign("keytype", keytype, envir=GO_Env)
- assign("organism", DOSE:::get_organism(OrgDb), envir=GO_Env)
- }
- if (ont == "ALL") {
- GO2GENE <- unique(goAnno[, c(2,1)])
- } else {
- GO2GENE <- unique(goAnno[goAnno$ONTOLOGYALL == ont, c(2,1)])
- }
- GO_DATA <- DOSE:::build_Anno(GO2GENE, get_GO2TERM_table())
- goOnt.df <- goAnno[, c("GOALL", "ONTOLOGYALL")] %>% unique
- goOnt <- goOnt.df[,2]
- names(goOnt) <- goOnt.df[,1]
- assign("GO2ONT", goOnt, envir=GO_DATA)
- return(GO_DATA)
- }
- get_GO_Env <- function () {
- if (!exists(".GO_clusterProfiler_Env", envir = .GlobalEnv)) {
- pos <- 1
- envir <- as.environment(pos)
- assign(".GO_clusterProfiler_Env", new.env(), envir=envir)
- }
- get(".GO_clusterProfiler_Env", envir = .GlobalEnv)
- }
- get_GO2TERM_table <- function() {
- GOTERM.df <- get_GOTERM()
- GOTERM.df[, c("go_id", "Term")] %>% unique
- }
- get_GOTERM <- function() {
- pos <- 1
- envir <- as.environment(pos)
- if (!exists(".GOTERM_Env", envir=envir)) {
- assign(".GOTERM_Env", new.env(), envir)
- }
- GOTERM_Env <- get(".GOTERM_Env", envir = envir)
- if (exists("GOTERM.df", envir = GOTERM_Env)) {
- GOTERM.df <- get("GOTERM.df", envir=GOTERM_Env)
- } else {
- GOTERM.df <- toTable(GOTERM)
- assign("GOTERM.df", GOTERM.df, envir = GOTERM_Env)
- }
- return(GOTERM.df)
- }
获取KEGG的通路和基因是一样的,也是用clusterProfiler
代码:
- hsa_kegg <- clusterProfiler::download_KEGG("hsa")
- names(hsa_kegg)
- head(hsa_kegg$KEGGPATHID2NAME)
- head(hsa_kegg$KEGGPATHID2EXTID)
- PATH2ID <- hsa_kegg$KEGGPATHID2EXTID
- PATH2NAME <- hsa_kegg$KEGGPATHID2NAME
- PATH_ID_NAME <- merge(PATH2ID, PATH2NAME, by="from")
- colnames(PATH_ID_NAME) <- c("KEGGID", "ENTREZID", "DESCRPTION")
- # write.table(PATH_ID_NAME, "HSA_KEGG.txt", sep="\t")
- library(biomaRt)
- mart <- useDataset("hsapiens_gene_ensembl", useMart("ensembl"))
- entrezgene <- PATH_ID_NAME$ENTREZID
- # This step need some time
- ensembl_gene_id<- getBM(attributes=c("ensembl_gene_id", "entrezgene"),
- filters = "entrezgene",
- values=entrezgene , mart= mart)
- PATH_ID_NAME <- merge(PATH_ID_NAME, ensembl_gene_id, by.x= "ENTREZID",by.y= "entrezgene")
R获取指定GO term和KEGG pathway的gene list基因集的更多相关文章
- GO 和 KEGG 的区别 | GO KEGG数据库用法 | 基因集功能注释 | 代谢通路富集
一直都搞不清楚这两者的具体区别. 其实初学者搞不清楚很正常,因为它们的本质是相通的,都是对基因进行归类注释的数据库. 建议初学者自己使用一下这两个数据库,应该很快就能明白其中的区别. (抱歉之前没讲清 ...
- 倒排索引 获取指定单词的文档集合 使用hash去重单词term 提高数据压缩率的方法
倒排索引源于实际应用中需要根据属性的值来查找记录.这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址.由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引(inve ...
- 一个获取指定目录下一定格式的文件名称和文件修改时间并保存为文件的python脚本
摘自:http://blog.csdn.net/forandever/article/details/5711319 一个获取指定目录下一定格式的文件名称和文件修改时间并保存为文件的python脚本 ...
- PHP 获取指定目录下所有文件(包含子目录)
PHP 获取指定目录下所有文件(包含子目录) //glob — 寻找与模式匹配的文件路径 $filter_dir = array('CVS', 'templates_c', 'log', 'img', ...
- 获取指定版本号svn
代码需求获取 svn update svnworkpath --username xxx --password xxx -r r464 r464 为指定版本号 可以获取指定版本号的代码 也 也可以在 ...
- BeautifulSoup获取指定class样式的div
如何获取指定的标签的内容是解析网页爬取数据的必要手段,比如想获取<div class='xxx'> ...<div>这样的div标签,通常有三种办法, 1)用字符串查找方法,然 ...
- 【百度地图API】如何调整结果面板的样式?如何获取指定页码的结果?
原文:[百度地图API]如何调整结果面板的样式?如何获取指定页码的结果? 摘要: 1.你是否想自定义查询后,结果面板的显示样式? 2.数据接口每次只返回10条结果,如何取到单独每一页的结果? ---- ...
- java正则表达式获取指定HTML标签的指定属性值
package com.mmq.regex; import java.util.ArrayList; import java.util.List; import java.util.regex.Mat ...
- 【js操作url参数】获取指定url参数值、取指定url参数并转为json对象
获取指定url参数值 /* 获取某url中的某参数值 调用:GetUrlQueryString("[url地址]","[参数名]"); */ function ...
随机推荐
- python(函数调用)
1.在原文件中调用 def abc(x,y): print x + y abc(2,3) #直接通过函数名加括号进行调用传参 2.同一个包(package)下面调用不同文件中的函数 "&qu ...
- [openssl][nginx] 使用openssl模拟ssl/tls客户端测试nginx stream
一 server的配置 nginx # cat conf/nginx.conf daemon off; events { debug_connection ; } stream { upstream ...
- C++(四十四) — 数组模板类(vector工具)
实现 stl 中的 vector 操作. 1.MyVector.h #pragma once #include <iostream> using namespace std; templa ...
- 使用HashMap,如果key是自定义的类,就必须重写hashcode()和equals()
java编程里有关约定:如果两个对象根据equals方法比较是相等的,那么调用这两个对象的任意一个hashcode方法都必须产生相同的结果. hashcode()和equals()都继承于object ...
- vue-(过滤器,钩子函数,路由)
1.局部过滤器 在当前组件内部使用过滤器,修饰一些数据 //声明 filters:{ '过滤器的名字':function(val,a,b){ //a 就是alax ,val就是当前的数据 } } // ...
- 均分纸牌(Noip2002)
1320:[例6.2]均分纸牌(Noip2002) 时间限制: 1000 ms 内存限制: 65536 KB提交数: 3537 通过数: 1839 [题目描述] 有n堆纸牌,编 ...
- mybatis之关联关系映射
Mybatis关联关系映射 1.一对多 首先先用逆向生成工具生成t_hibernate_order.t_hibernate_order_item 这两张表对应的model与mapper OrderVo ...
- yaml文件
apiVersion: apps/v1beta1 kind: Deployment metadata: annotations: deployment.kubernetes.io/revision: ...
- java.util.Properties 读取配置文件中的参数
用法 getProperty方法的返回值是String类型. java.util.Properties 读取配置文件中的参数 //读取配置文件 FileInputStream inStream = n ...
- 洛谷 P2279 [HNOI2003]消防局的设立 题解
每日一题 day34 打卡 Analysis 这道题的正解本来是树形dp,但要设5个状态,太麻烦了.于是我就用贪心试图做出此题,没想到还真做出来了. 考虑当前深度最大的叶子结点,你肯定要有一个消防局去 ...