我正在使用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]]
有没有办法以编程方式访问它?
答案 0 :(得分: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"
答案 1 :(得分: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"
答案 2 :(得分: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/
我希望你能用这些信息做点什么