我想创建一个Igraph对象列表,其中包含用于由另一个变量确定的每个Igraph对象的数据。
这就是我创建单个Igraph对象的方法
netEdges <- NULL
for (idi in c("nom1", "nom2", "nom3")) {
netEdge <- net[c("id", idi)]
names(netEdge) <- c("id", "friendID")
netEdge$weight <- 1
netEdges <- rbind(netEdges, netEdge)
}
g <- graph.data.frame(netEdges, directed=TRUE)
对于net$community
的每个唯一值,我想创建一个新的Igraph对象。然后我想计算每个对象的中心度量,然后将这些度量反馈到我的net
数据集中。非常感谢你的帮助!
答案 0 :(得分:1)
由于您提供的代码不能完全重现,因此无法保证以下内容的运行。它旨在作为如何构建真实解决方案的指南。如果您提供其他人可用于运行代码的示例数据,您将获得更好的答案。
执行此操作的最简单方法可能是将net
拆分为一个列表,其中每个唯一值community
都有一个元素,然后将图形构建代码应用于每个部分,并为每个部分存储结果在另一个清单中。在R中有几种方法可以做这种事情,其中一种方法是使用lapply
:
#Break net into pieces based on unique values of community
netSplit <- split(net,net$community)
#Define a function to apply to each element of netSplit
myFun <- function(dataPiece){
netEdges <- NULL
for (idi in c("nom1", "nom2", "nom3")) {
netEdge <- dataPiece[c("id", idi)]
names(netEdge) <- c("id", "friendID")
netEdge$weight <- 1
netEdges <- rbind(netEdges, netEdge)
}
g <- graph.data.frame(netEdges, directed=TRUE)
#This will return the graph itself; you could change the function
# to return other values calculated on the graph
g
}
#Apply your function to each subset (piece) of your data:
result <- lapply(netSplit,FUN = myFun)
如果一切顺利,result
应该是一个列表,其中包含myFun
的每个唯一值的图表(或您要修改的任何内容community
)。其他用于执行类似任务的常用工具包括ddply
包中的plyr
。