0

Rのアノテーションパッケージを使用して、特定の遺伝子に関連する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

rapplylapplyの再帰バージョンであるを使用できます。ここでは、リストのターミナルノードに恒等関数を適用します。

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

または1つずつアクセスする

rapply(x,f=I)[2] 
GO:0035556.Parents.is_a 
       "GO:0007165" 
于 2013-03-06T14:44:44.583 に答える
0

メソッドを次のように凝縮できた可能性があることに注意してください

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

できることの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 に答える