我们通常会遇到这样的list
如何将他转化成data.frame呢?
我们可以利用 ldply() 函数
#这里是将GSEA的Hallmark 转化成矩阵,方便我后续的处理。
df <- ldply(Hs.h.all.v7.1.entrez,data.frame)
结果如图所示
后续处理
因为Hallmark并未给出这些pathway的 Process category,我准备自己加上去。参考 MSigBD文章 进行标注。
library(dbplyr)
library(plyr)
library(clusterProfiler)
library(org.Hs.eg.db)
library(tidyverse)
Hs.h.all.v7.1.entrez
#这里其实是测试这个函数是否可行
df <- ldply(Hs.h.all.v7.1.entrez,data.frame)
unique(df$.id)#查看数据是否出错
# gene_symbol <- bitr(df$X..i..,
# fromType="ENTREZID",
# toType="SYMBOL",
# OrgDb="org.Hs.eg.db")
#写一个id转换的function,放到lapply()函数里使用。
transid <- function(i,data = Hs.h.all.v7.1.entrez){
gene_symbol <- bitr(Hs.h.all.v7.1.entrez[[i]],
fromType="ENTREZID",
toType="SYMBOL",
OrgDb="org.Hs.eg.db")
}
#将entrezID转换成genesymbol
a <- lapply(names(Hs.h.all.v7.1.entrez),transid)
#names(a)[1] <- names(Hs.h.all.v7.1.entrez[1])
#将名称对应
for (i in 1:length(names(Hs.h.all.v7.1.entrez))) {
names(a)[i] <- names(Hs.h.all.v7.1.entrez[i])
}
#a[[1]]$ENTREZID <- NULL
#删除ENTREZID列,因为我不需要这列
for (i in 1:length(names(a)) ) {
a[[i]]$ENTREZID <- NULL
}
#将list转化成data.frame
b <- ldply(a,data.frame)
#复制新的一列,处理后用于merge
b$class <- b$.id
#通过正则表达式将数据处理成需要的格式
b$class <- str_extract(b$class,"(?<=\\_)[^\\_].+")
#使用merge()将每个pathway和Process category 对应起来
c <- merge(b,Hallmark_category,
by.x = "class",
by.y = "Hallmark name",
)