1
我正在尝试为节点列表创建网络邻居的数据集。我虽然我可以用lapply函数做这个,我使用neighbors命令。作为一个增加的复杂性,我的一些查找节点不在图中,但我无法让它工作。lapply函数查找igraph中的邻居(当不是所有节点都找到时)
下面是一个例子:
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)
neighbors<- lapply(testlist2, function(p) { #Each pledge_id
temp=neighbors(graph,p) #Find all the neighbors for that pledge
return(temp)
})
neighbors<- lapply(testlist, function(p) { #Each pledge_id
temp=neighbors(graph,p) #Find all the neighbors for that pledge
return(temp)
})
不幸的是,这将返回在这两种情况下一派胡言。我错过了什么?
我所需的输出会是这样的:
lookupnode neighbor
A B
H .
C D
C F
D E
J .
我知道最终我需要在某个地方加一个临时= data.table :: rbindlist(TEMP)的命令,但我不认为正在造成h。。
你可以用'邻居= NB $ name'的data.frame内,而不是'sapply' – MrFlick
这是伟大的!当然这是一个数据框。哎呦。另外在%V(图)$ name中有'x%'是关键,并且在本项目的其他地方对我会很有用。谢谢! – Danielle
这对一级邻居(这是我问的)非常有效,但是如果我在'ego'函数'ego(图形2,x)'中替换'',它会返回一个包含类“igraph.vs”的1的列表。长度为1,所以它仍然会触发第一个if语句,但错误“data.frame(lookupnode = x,neighbor = nb $ name,stringsAsFactors = FALSE)中的错误: 参数意味着不同的行数:1,0”暗示我不能将它强制转换为data.frame。在这种情况下你将如何修改? – Danielle