在R中使用GEOquery和SAM / Siggenes

时间:2011-09-12 09:29:00

标签: r bioconductor

我最近开始根据需要开始学习R,到目前为止,我认为这很好。但我还处于早期阶段。然而,我面对R中的这一重大紧迫挑战,我将非常感谢一些帮助。我的编程技巧显然非常业余,并且绝对会接受我能得到的任何帮助。这是:

  1. 创建要从GEO检索的数据集列表(gdslist) 使用GEOquery包的数据库
  2. 将gdslist项目(gdsid)转换为表达式数据。那是, 可以与我的分析一起使用的数据。为此,一个GDS2eSet函数 做得很好。
  3. 以a的方式读入此转换后的表达式数据 可以创建类/级别文件(.cls)。 GDS3715数据集 例如,有3个级别 - 胰岛素抵抗,胰岛素敏感和 糖尿病。有时,数据集就像那样简单。但 其他时候,就像在这种情况下,水平将是6分析 目的,因为虽然有表型3级,但他们 被分为治疗组和未治疗组。经常有一个 在这种情况下添加了“代理”列。每个班级/级别都需要 分配了一个数字(0,1,2 ......)。这几乎是一般的 .cls文件的格式。
  4. 要运行Siggenes / SAM分析(也是R中的包),有两个文件 每个数据集都需要:表达式文件(转换后的文件来自2) 以上)和随附的群集文件(来自3)。
  5. 能够为某种gdslist项运行此过程 循环并将我的数据存储在指定的目录中。
  6. 我目前只能进入第2步。我认为第3步是挑战的关键......

    非常感谢您的期待。

    到目前为止

    脚本:

    > gdslist = c('GDS3715','GDS3716','GDS3717'...)#up to perhaps 100 datasets
    > analysisfunc = function(gdsid) {
        gdsdat = getGEO(gdsid,destdir=".")
        gdseset = GDS2eSet(gdsdat)
        pData(gdseset)$disease.state #Needed assignment, etc...Step 3 stuff ;Siggenes/SAM can perhaps be done here
        return(sprintf("Results from %s should be here",gdsid))
      }
    > resultlist = sapply(gdslist,analysisfunc) #loop function 
    

1 个答案:

答案 0 :(得分:0)

这适用于所有gds数据集。

 GEOSAM.analysis <- function( gdsid, destdir = getwd() ) {
       require( 'GEOquery' )
       require( 'siggenes' )
       ## test if gdsid is gdsid
       if( length(grep('GDS', gdsid)) == 0 ){
        stop()
       }
       gdsdat = getGEO( gdsid, destdir = destdir )
       gdseset = GDS2eSet( gdsdat )
       gdseset.pData <- pData( gdseset )
       gds.factors <- names( gdseset.pData )
       gds.factors[gds.factors == 'sample'] <- NA
       gds.factors[gds.factors == 'description'] <- NA
       gds.factors <- gds.factors[!is.na( gds.factors )]
       cl.list <- sapply( gdseset.pData[gds.factors], as.character)
       cl.list <- factor( apply( cl.list, 1, function(x){ paste( x , collapse = '-' )} ) )
       if( length( levels ( cl.list ) ) == 2 ){
        levels( cl.list ) <- 0:length( levels( cl.list ) )
       } else {
        levels( cl.list ) <- 1:length( levels( cl.list ) )
       }
       sam.gds <- sam( gdseset, cl.list )
       results.file <- file.path( destdir, paste( gdsid, '.sam.gds.rdata', sep =''  ) )
       save( sam.gds, file = results.file )
       return( sprintf( "Results from %s are saved in '%s'. These can be loaded by 'load('%s')'.",gdsid, results.file, results.file ) )
  }

  gdslist = c('GDS3715', 'GDS3716', 'GDS3717')
  resultlist = sapply(gdslist, GEOSAM.analysis)  
  print(resultlist)