-2

名前とそのコンポーネントを持つ自分がいlistて、他のベクトルにそのコンポーネントを持つ名前を取得したいとします。

それは私のリストの隣人です

neighbors[[1]]
 [1] "CNBP"                  "IGF2BP1"               "RPL3|OK/SW-cl.32"     
 [4] "HNRNPC"                "PURA|hCG_45299"        "RPS3A"                
         "Cnbp"                  "Mis12|DN-393H17.5"    
neighbors[[2]]
[1] "NIN"                "PRKACA"             "AURKA|RP5-1167H4.6"
[4] "GSK3B"              "AMOT"               "UBC"

と私の興味のあるベクトル mtop

[1] "TUBA1A"                "DNAJB1"                "MME"                  
[4] "PRKCB"                 "PARK2|KB-152G3.1"      "UBC" 

たとえば、私の考えはneighbors[2]、共通のUBCを持つの名前を返すことです。

何か案は??

4

2 に答える 2

2

まず、あなたのデータ。あなたの出力はかなり奇妙に見えます。これがあなたの持っているものでない場合は、dputこれらの変数を再現可能な方法でダンプするために使用することを検討してください。

mtop <- c("TUBA1A", "DNAJB1", "MME",
          "PRKCB", "PARK2|KB-152G3.1", "UBC")
neighbors <- list(c("CNBP", "IGF2BP1", "RPL3|OK/SW-cl.32",
                    "HNRNPC", "PURA|hCG_45299", "RPS3A",
                    "Cnbp", "Mis12|DN-393H17.5"),
                  c("NIN", "PRKACA", "AURKA|RP5-1167H4.6",
                    "GSK3B", "AMOT", "UBC"))

neighborsと共通のベクトル要素を少なくとも 1 つ持つlist の要素を選択するにmtopは、次のコマンドを使用できます。

matching <- sapply(neighbors, function(l) length(intersect(mtop, l)) > 0)
print(neighbors[matching])

と共通しneighbors[2]ているため、これはを出力します。論理ベクトルを介してこれを行います。あなたの質問が尋ねたもののようです。"UBC"mtopmatching

位置を考慮したい場合、つまりが両方のベクトルの位置 6 にneighbors[2]あるためのみを選択する場合は、次のコマンドを使用する必要があります。"UBC"

matching <- sapply(neighbors, function(l) any(l == mtop))

ただし、これneighbors[[1]]は よりも長いため、警告が作成されますmtop

両方のデータ構造に共通の名前が必要な場合は、次のコードを使用できます。

intersect(unlist(neighbors), mtop)

他に何か必要な場合は、質問をより具体的にする必要があります。つまり、出力がどのように見えるかの明確な例を示し、構造的に異なる出力につながる可能性のあるすべての入力構成をカバーする必要があります。

于 2012-10-15T13:04:25.570 に答える
0

どうですか:

l<- lapply(neighbours,function(x)x[x %in% mtop])

これは、各リスト要素が vector にある要素を持つリストを返しますmtop

次に、長さがゼロでない要素のみを選択します。

names(l)[sapply(l,length)>0]

これらを 1 行にまとめることができます。

names(neighbours)[sapply(neighbours,function(x)Reduce("|",mtop %in% x))]
于 2012-10-15T11:22:01.267 に答える