使用 lapply 和 igraph 生成二级邻居列表
Generate list of second-degree neighbors using lapply and igraph
我在这里得到了一些关于如何为网络节点列表查找邻居的极好的建议。参见:
现在我需要对二级邻居做同样的事情。但是,将 ego
或 neighborhood
函数替换到此循环中会产生错误。
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))
data.frame(lookupnode = x, neighbor = nb$name, stringsAsFactors = FALSE) 中的错误:参数暗示不同的行数:1、0
我收集到的问题是无法将自我和社区直接强制转换为数据框。我可以使用 unlist
然后放入数据框,但我想要的值最终会变成 row.names
而不是我可以放入输出中的值。
如何创建二级邻居的输出?
已更改
neighbor=nb$name, # h/t @MrFlick for this shortcut
至
neighbor=names(unlist(nb)), # 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>
>
我在这里得到了一些关于如何为网络节点列表查找邻居的极好的建议。参见:
现在我需要对二级邻居做同样的事情。但是,将 ego
或 neighborhood
函数替换到此循环中会产生错误。
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))
data.frame(lookupnode = x, neighbor = nb$name, stringsAsFactors = FALSE) 中的错误:参数暗示不同的行数:1、0
我收集到的问题是无法将自我和社区直接强制转换为数据框。我可以使用 unlist
然后放入数据框,但我想要的值最终会变成 row.names
而不是我可以放入输出中的值。
如何创建二级邻居的输出?
已更改
neighbor=nb$name, # h/t @MrFlick for this shortcut
至
neighbor=names(unlist(nb)), # 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>
>