2016-07-29 6 views
0

ここでは、ネットワークノードのリストのネイバーをルックアップする方法に関するいくつかの優れたアドバイスがあります。以下を参照してください:lapply function to look up neighbors in igraph (when not all nodes are found)lapplyとigraphを使用して2次近傍のリストを生成

今、私は第二度の隣人で同じことをする必要があります。ただし、このループにegoまたはneighborhoodのいずれかの機能を代入するとエラーが発生します。 data.frameで

edgelist <- read.table(text = " 
A B 
B C 
C D 
D E 
C F 
F G") 

testlist <- read.table(text = " 
A 
H 
C 
D 
J") 

testlist2 <- read.table(text = " 
A 
C 
B 
D 
E") 

library(igraph) 
graph <- graph.data.frame(edgelist) 
str(graph) 

get_neighbors <- function(graph, n) { 

    do.call(rbind, lapply(n, function(x) { 

    if (x %in% V(graph)$name) { 

     nb <- neighborhood(graph,2, x) ##HERE## 

     if (length(nb) > 0) { 
     data.frame(lookupnode=x, 
        neighbor=nb$name, # h/t @MrFlick for this shortcut 
        stringsAsFactors=FALSE) 
     } else { 
     data.frame(lookupnode=x, neighbor=NA, stringsAsFactors=FALSE) 
     } 

    } else { 
     data.frame(lookupnode=x, neighbor=NA, stringsAsFactors=FALSE) 
    } 

    })) 

} 

A=get_neighbors(graph, as.character(testlist$V1)) 

はエラー(lookupnode = xで、隣人= NBの$名、stringsAsFactors = FALSE):引数は、行の異なる数を意味するもの:1、0

を私は問題はそのエゴで収集し、近傍を直接データフレームに強制することはできません。 unlistを使用してデータフレームに入れることができますが、値をrow.namesとして出力することができます。

2次近傍の出力を作成するにはどうすればよいですか?

答えて

1

neighbor=names(unlist(nb)), # h/t @MrFlick for this shortcut 

neighbor=nb$name, # h/t @MrFlick for this shortcut 

を変更し、それが今の私のために働いています。

> A 
    lookupnode neighbor 
1   A  A 
2   A  B 
3   A  C 
4   H  <NA> 
5   C  C 
6   C  B 
7   C  D 
8   C  F 
9   C  A 
10   C  E 
11   C  G 
12   D  D 
13   D  C 
14   D  E 
15   D  B 
16   D  F 
17   J  <NA> 
> 
+0

魅力的な作品です。 'row.names'を引き出すために' names'を追加する必要がありました。 – Danielle

関連する問題