1

私はごく最近、必要に迫られて R を学び始めましたが、これまでのところ、とても良いと思います。しかし、私はまだ非常に初期の段階にいます。しかし、私はRでこの大きな緊急の課題に直面しており、助けていただければ幸いです. 私のプログラミングスキルは明らかにアマチュアであり、私が得ることができるどんな助けも間違いなく受け入れます. ここに行きます:

  1. GEOquery パッケージを使用して GEO データベースから取得するデータセットのリスト (gdslist) を作成するには
  2. gdslist 項目 (gdsid) を式データに変換します。つまり、私の分析で使用できるデータです。これには、GDS2eSet 関数が問題なく機能します。
  3. クラス/レベル ファイル (.cls) を作成できるように、この変換された式データを読み込みます。たとえば、GDS3715 データセットには、インスリン抵抗性、インスリン感受性、糖尿病の 3 つのレベルがあります。場合によっては、データセットはそれほど単純です。ただし、この場合のように、表現型には 3 つのレベルがありますが、治療グループと非治療グループに分けられているため、分析目的でレベルは 6 になります。そのような場合、「エージェント」列が追加されることがよくあります。各クラス/レベルには数値 (0、1、2...) を割り当てる必要があります。これは、ほとんどの .cls ファイルの一般的な形式です。
  4. Siggenes/SAM 分析 (R のパッケージでもあります) を実行するには、データセットごとに 2 つのファイルが必要です: 式ファイル (上記 2 から変換されたファイル) と付随するクラスター ファイル (3 から)。
  5. 一種のループで gdslist アイテムに対してこのプロセスを実行し、指定したディレクトリにデータを保存できるようにします。

現在、ステップ 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 
4

1 に答える 1

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)
于 2011-12-21T15:30:38.813 に答える