zoukankan      html  css  js  c++  java
  • step-1

    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

  • 相关阅读:
    带你剖析WebGis的世界奥秘----点和线的世界
    XML解析
    Java-工厂设计模式
    分享:软件包和文档
    启航,新开始
    docker容器网络通信原理分析(转)
    【好书分享】容器网络到kubernetes网络
    go语言接受者的选取
    go语言的unsafe包(转)
    protocol buffers生成go代码原理
  • 原文地址:https://www.cnblogs.com/SWTwanzhu/p/13210866.html
Copyright © 2011-2022 走看看