从 igraph 中删除边

Deleting edges from igraph

抱歉,我是这个 igraph 包的新手 现在我有一个非简单的循环,我试图通过遍历每个节点并删除满足特定条件的边来简化循环。我已经研究这个问题几个小时了,希望能提出解决这个问题的建议。

现在我正在研究一个函数,给定一个图的顶点,然后我们想要从该特定顶点消除所有长度小于所有这些边的最大长度的边

df=data.frame(node("A","A","B","B","A"),edge("B","C","C","A","B"),length(1,1,1,1,10))
g<-graph_from_data_frame(df)
delete_extra_edges<-function(g,node){
   list_of_incident_edges=incident_edges(g,node,"out")
   max_quantity<-max(unlist(list_of_incident_edges[[1]]$length))
   list_to_delete=which(list_of_incident_edges[[1]]$length<max_quantity)
   for(index in list_to_delete){
       g<-delete_edges(g,index) #or alternatively: g<-g-list_of_incident_edges[[1]][index]
   }
   return(g)
   }

这个方法的问题是(除了它仍然会保留与最大长度相同长度的多条边,但我稍后会处理),list_to_delete不一定等同于图g中的边ID。

替代实现的问题是它给了我 "Cannot use an edge from another graph" 错误

我正在使用上面定义的测试数据框 df

您当前的代码中存在一些错误。

  1. 我知道这只是一个示例,但您的数据框构建不正确。

  2. 您经常使用“=”为变量赋值,但在 R 中您使用“<-”代替。

  3. 您需要更多代码来捕获节点 "C"

  4. 删除 for 循环并一次删除所有边似乎可行。

这似乎是在为节点 "A":

做你想做的事
library(igraph)
node <- c("A","A","B","B","A")
edge <- c("B","C","C","A","B")
length <- c(1,1,1,1,10)

df<-data.frame(node,edge,length)
g<-graph_from_data_frame(df)
delete_extra_edges<-function(graph,node){
  list_of_incident_edges<-incident_edges(graph,node,"out")
  max_quantity<-max(unlist(list_of_incident_edges[[1]]$length))
  list_to_delete <- which(list_of_incident_edges[[1]]$length < max_quantity)
  newgraph <- graph - list_of_incident_edges[[1]]
  return(newgraph)
}