2013-03-06 36 views
0

我使用R的Annotation包獲取與某些基因相關的GO術語。使用getGOParents(項)函數的結果是:遞歸訪問R中列表中的元素

> x = getGOParents("GO:0035556") 

$`GO:0035556` 
$`GO:0035556`$Ontology 
[1] "BP" 

$`GO:0035556`$Parents 
    is_a 
"GO:0007165" 

列表的結構是:

dput(x) 
structure(list(`GO:0035556` = structure(list(Ontology = "BP", 
Parents = structure("GO:0007165", .Names = "is_a")), .Names = c("Ontology", 
"Parents"))), .Names = "GO:0035556") 

我需要訪問列表的「最後」一詞,我做了一個真正的可笑的方式:

y=x[1] 
z=y[[1]] 
w=z[[2]] 
s=w[[1]] 

有沒有一種方法以編程方式訪問它?

+1

可否請你添加一個'dput'因爲很難從粘貼的內容中看到它的結構。並請描述你想要得到的價值... – juba 2013-03-06 14:21:38

回答

0

單獨訪問那些我使用這個功能吧:

getParent <- function(x){ 
    parent = NA 
    if(exists(x,revmap(GOBPCHILDREN))){ 
     parents = get(x,revmap(GOBPCHILDREN)) 
     parent = tail(parents, n=1) 
    } 
    if(!is.na(parent)){ 
     return(parent) 
    } 
    return(NA) 
} 

但我不想父母最高的,因爲這個人是始終不變的。所以我改變了功能:

getParent <- function(x){ 
    parent = NA 
    if(exists(x,revmap(GOBPCHILDREN))){ 
     parents = get(x,revmap(GOBPCHILDREN)) 
     parent = tail(parents, n=4)[1] ##change the 4 to which level you want 
    } 
    if(!is.na(parent)){ 
     return(parent) 
    } 
    return(NA) 
} 

的GO術語一個很好的可視化工具是大猩猩:http://cbl-gorilla.cs.technion.ac.il/

我希望你可以做一些與此信息

+0

我剛剛複製你的功能,並嘗試與x =去:0004726,它給了我,而它有幾個祖先(http://amigo.geneontology。 org/cgi-bin/amigo/term_details?term = GO:0004726) – 2013-03-07 15:20:45

+0

@ Lazza87這只是BP(生物過程)您的GO ID包含MF(分子功能),因此請將GOBPCHILDREN更改爲GOMFCHILDREN。 – Jetse 2013-03-07 15:53:42

+0

現在它似乎工作,但參數ñ方法應該返回祖先的數量?因爲使用n = 4,它只返回「第一個」父親 – 2013-03-07 16:06:39

0

您可以使用rapply這是lapply的遞歸版本。在這裏,我將身份識別功能應用到您的列表的終端節點上。

rapply(x,f=I) 
GO:0035556.Ontology GO:0035556.Parents.is_a 
       "BP"   "GO:0007165" 

或由一個

rapply(x,f=I)[2] 
GO:0035556.Parents.is_a 
     "GO:0007165" 
0

注意,你可能都凝結着您的方法

x[[1]][[2]][[1]] 

有一兩件事你可以做訪問一個是使用unlist

刪除列表結構
unlist(x) 
#GO:0035556.Ontology GO:0035556.Parents.is_a 
#    "BP"   "GO:0007165" 

您可以通過索引

> unlist(x)[1] 
GO:0035556.Ontology 
       "BP" 
> unlist(x)[2] 
GO:0035556.Parents.is_a 
      "GO:0007165"