2013-03-06 96 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"