2011-09-12 65 views
1

我最近剛開始學習R作爲需求的結果,到目前爲止,我認爲這很好。但我仍處於早期階段。然而,我面臨着R這個重大的緊迫挑戰,我將非常感謝一些幫助。我的編程技巧顯然是業餘愛好者,絕對會接受我能得到的任何幫助。這裏所說:在R中使用GEOquery和SAM/Siggenes

  1. 要創建的數據集列表(gdslist)被使用GEOquery包
  2. 要轉換gdslist項目(gdsid)來表達數據從GEO 數據庫檢索。也就是說, 可用於我的分析的數據。爲此,GDS2eSet函數 可以正常工作。
  3. 要以這種方式讀取轉換後的表達式數據,可以創建 類/級別文件(.cls)。例如,GDS3715數據集爲 ,具有3個水平 - 胰島素抵抗,胰島素敏感和糖尿病。有時候,數據集就像那樣簡單。但其他時間,如在這種情況下,水平將爲6分析 的目的,因爲雖然有3個水平的表型,他們 已分爲治療組和未治療組。在這種情況下,經常會有一個 添加「代理」列。每個班級/級別需要爲 分配一個數字編號(0,1,2 ...)。這幾乎是.cls文件的一般 格式。
  4. 要運行Siggenes/SAM分析(也是R中的一個包),每個數據集需要兩個文件 :表達式文件(上面的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 
+0

我對分析的細節並不熟悉,但我經常發現使用單個文件很容易 - 分析步驟簡單,然後將其抽象化爲一次處理所有文件。你可以爲單個文件執行你需要的分析嗎? – Chase

+0

'圖書館(siggenes); ?sam'表示'res = sam(gdseset,gdseset $ disease.state)'會帶你進入第5步。如果主要目標是副作用(輸出「res」到一個文件)。 –

+0

@Chase; @MartinMorgan。謝謝你,Chase和Martin。通過我的帖子中包含的代碼,我無法通過其中一個獲得想要的結果。但感謝您的建議。我想在嘗試'res = sam(gdseset,gdseset $ disease.state)'之前嘗試,但我的互聯網連接現在有點動作,但我想承認輸入並說聲謝謝。我希望在接下來的幾個小時內嘗試使用該代碼時,我會更新該帖子。 – Avoks

回答

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)