gset <- getGEO("GSE42872",destdir = ".",AnnotGPL = F,getGPL = F) if(F){ gset <- getGEO("GSE42872",destdir = ".",AnnotGPL = F,getGPL = F) save(gset,file = "GSE42872_eSet.Rdata") } if(T){ gset <- getGEO("GSE42872",destdir = ".",AnnotGPL = F,getGPL = F) save(gset,file ="GSE42872_eSet.Rdata") } if(F){ gset <- getGEO("GSE42872",destdir = ".",AnnotGPL = F,getGPL = F) save(gset,file ="GSE42872_eSet.Rdata") } gset <- getGEO("GSE42872",destdir = ".",AnnotGPL = F,getGPL = F) class(gset) length(gset) class(gset[[1]]) gset a = getGEO(file = "GSE42872_series_matrix.txt.gz",AnnotGPL = F,getGPL = F) class(a) length(a) a if(T){ gpl <- getGEO("GPL6244",destdir = ".") colnames(Table(gpl)) head(Table(gpl)[,c(1,12)]) probe2gene = Table(gpl)[,c(1,12)] head(probe2gene) library(stringr) save(probe2gene,file = "probe2gene.Rdata") } a = gset[[1]] dat = exprs(a) ?exprs class(a) class(dat) dim(dat) dat[1:4,1:4] boxplot(dat,las = 2) ##dat中的GSMxxx是不是探针的id啊?为何画boxplot的时候,这里6个的中值在一条线上数据才是可用的呢?每个GSMxxx的列中所有行的值的分布 boxplot(dat,las = 1) boxplot(dat,las = 2) boxplot(dat[,1]) boxplot(dat[,1],las = 1) boxplot(dat[,1:2],las = 1) ##las = 1表示平行,2表示垂直与x轴 pd = pData(a) class(pd) dim(pd) library(stringr) pd[1:4,1:4] str_split(pd$title, " ") class(str_split(pd$title, " ")) class(str_split(pd$title, " ",simplify = T)) str_split(pd$title, " ",simplify = T) ?str_split group_list = str_split(pd$title," ",simplify =T)[,4] class(str_split(pd$title," ",simplify =T)) #得到的是矩阵 group_list table(group_list) gpl <- getGEO("GPL6244",destdir = ".") ##这里如果提前终止该命令,特别是在网速慢的时候会提前终止,得到的GPL6244.soft文件不完全,但是在windows却也不能删除它,提示被占用。 gpl_Table <- Table(gpl) ##gpl_Table是data.frame,可见Table()就是提取GPL6244.soft这个文件中前述表达矩阵中对应探针的注释部分 ##在notepad打开GPL6244.soft这个文件,前面是以!或者#开头的解释行,包括对后续正文的列名的注释,然后是!platform_table_begin,正文,!platform_table_end. ##哪有Table()这个函数的源码呀? dim(gpl_Table)##33297行 12列 dim(dat) ##都是33297行 head(gpl_Table) head(dat) head(gpl_Table)[,c(1,12)] tail(gpl_Table)[,c(1,12)] probe2gene = gpl_Table[,c(1,12)] head(probe2gene) save(probe2gene,file = "probe2gene.Rdata") dim(probe2gene) dim(dat) ###既然probe2gene与dat行数一致,测试一下dat的每个行号是否都在probe2gene$ID中 a = rownames(dat) %in% probe2gene$ID table(a) ###返回的是 TRUE 33297 ## ##有个东西 一直想不起来 ##前面有很多行以!或者#开头表示注释,然后只是。。。begin,然后是正文,是一个大的表达矩阵还是啥 ##最后有。。。end.......打开一看,不就是这里的GPLxxx.soft文件 ##统计一下probe2gene$category这一列的频次,所以每一种都代表的啥意思啊? table(probe2gene$category) library(BiocManager) BiocManager::install("hugene10sttranscriptcluster.db") suppressMessages(library(hugene10sttranscriptcluster.db)) ids = toTable(hugene10sttranscriptclusterSYMBOL) ##如何知道要下载这个数据集?它跟前面的dat中的行号以及probe2gene中的ID列有啥关系? head(ids) dim(ids) head(probe2gene) dim(probe2gene) ##这里得到的probe2gene后面似乎没有用到啊,那为什么要取它? ##rownames(dat)有13483个是ids$probe2gene中没有的:FALSE 13483 TRUE 19814 b = rownames(dat) %in% ids$probe_id table(b) ##反过来,ids$probe_id都在dat的行号或者probe2gene$ID中:TRUE 19814 c = ids$probe_id %in% rownames(dat) table(c) colnames(ids) = c("probe_id","symbol") ##不明白这里,ids的colnames就是probe_idh和symbol,为啥这里又再赋值一次? ids = ids[ids$symbol !="",] ##难道说,symbo这一列还有为空的行,也就是有probe_id,没有symbol,反正就是排除为空的行! ###下面验证,确实是的 x1 = data.frame(x = c(1,4,"",23,46),y = c(1,1,1,1,1)) x1 y1 = a[a$x != "",] y1 z1 = a[a$y != "",] z1 ###但是下面呢,数据框还可以依据逻辑值访问嘛? ids_no_symbol = ids$symbol != "" head(ids_no_symbol) table(ids_no_symbol) ids[TRUE,] ids[FALSE,] ids[,FALSE] ids = ids[ids$symbol != "",] ##1步 ##跟下面%in%一样,返回的是逻辑值,然后用逻辑值访问数据框 ##我已开始还以为是挨个判断symbol为不为空,不为空的话就访问这个symbol,然后取出对应的probe2gene添加到新的ids中的行 dim(ids) ids = ids[ids$probe_id %in% rownames(dat),] ##2步 ##只取逻辑值为TRUE的行嘛?前面已经table了,所有的都为TURE dim(ids) dat[1:4,1:4] head(ids) dat = dat[ids$probe_id,] ##3步 ##1先去除symbol为空的行,然后2取ids中probe_id和dat中rownames相同的行;然后再3将dat中非ids$probe_id的行去除 dim(dat) ##dat只有19814行了 ##通过行名访问矩阵,加上引号 ##一开始用的是dat["7892501",],提示下标出界 ##我就想访问矩阵有哪些方式:可不可以通过行号访问啊?代码是怎样的? ##然后百度发现可以,就又试了下上面那句,还是不行,那是不是这个行号没了,就head了dat,挑第一二行试了下,可以! dat["7892501",] dat["7896759",] dat[c("7896759","7896761"),] ids$median = apply(dat,1,median) ##这时候dat和ids的行就一一对应了嘛?直接添加一列median是匹配的吗? ##当然是的,因为现在的dat是由ids$probe_id访问原有的dat的行号得到的,顺序应该和ids$probe_id是一致 ##前面对GSMxxx的列话boxplot,这里又对每一行取中值。。。不懂啊 ##还有,直接在现在的dat中添加median这一列不行嘛? dim(ids) head(ids) ids = ids[order(ids$symbol,ids$median,decreasing = T),] ##Jimmy说symbol按照median从大到小排列,但是从结果看怎么是median按照symbol倒序排列??? ##为什么要排序呢? dim(ids) head(ids) ##这里order()之后的结果有些迷惑。。。下面见示例 ##按示例 t1 = data.frame(x =c("a","b","c","d","e"),y = c(8,2,4,10,6)) t1 t2 = t1[order(t1$x,t1$y,decreasing = T),] t2 ##跑了这一步,ids就已经变了,所以ids中duplicated的子集是什么样的?不加!试试 dim(ids) dim(dat) dat = dat[ids$probe_id,] dim(dat) dat[1:4,1:4] ids[1:4,1:3] rownames(dat) = ids$symbol ##到这里可以看出,经过dat=dat[ids$probe_id,]这一步,dat中的行号(也就是ids中的probe_id) ##也跟着ids的顺序更改了,且一一对应,因此才可以有rownames(dat) = ids$symbol这一句。 ##不然,应该不能直接把ids中symbol直接赋值dat的行名 dat[1:4,1:4] ls() save(dat,ids,group_list,gset,probe2gene,pd,file = "step1-output-version2.Rdata")
参考:https://github.com/jmzeng1314/GEO/tree/master/GSE42872_main
最新评论