0

我正在使用 R 的 Annotation 包来获取与某些基因相关的 GO 术语。使用 getGOParents(term) 函数的结果是:

> 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]]

有没有办法以编程方式访问它?

4

3 回答 3

2

您可以使用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" 
于 2013-03-06T14:44:44.583 回答
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" 
于 2013-03-06T14:48:58.470 回答
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 术语的一个很好的可视化工具是 GOrilla:http ://cbl-gorilla.cs.technion.ac.il/

我希望你能用这些信息做点什么

于 2013-03-07T14:14:06.857 回答