我有以下網路圖:
library(tidyverse)
library(igraph)
set.seed(123)
n=15
data = tibble(d = paste(1:n))
relations = tibble(
from = sample(data$d),
to = lead(from, default=from[1]),
)
graph = graph_from_data_frame(relations, directed=T, vertices = data)
V(graph)$color <- ifelse(data$d == relations$from[1], "red", "orange")
plot(graph, layout=layout.circle, edge.arrow.size = 0.2)

我學習了如何洗掉此圖中的所有“邊”:
g <- graph-E(graph)
plot(g)
現在,我正在嘗試做同樣的事情,但使用“回圈”代替:
for (i in 1:15)
for (j in 1:15) {
graph <- graph - edge(paste0(i, "|", j))
}
但我認為問題在于上面的代碼試圖洗掉存在的“邊緣”,并且當命令洗掉不存在的邊緣時,該代碼沒有能力“跳過”(覆寫)實體:
Error in delete_edges(e1, unlist(e2, recursive = FALSE)) :
At iterators.c:1828 : Cannot create iterator, invalid edge id, Invalid vertex id
有沒有辦法指示這個“回圈”“跳過”兩個邊緣沒有連接的每個實體并繼續直到回圈完成?
謝謝!
uj5u.com熱心網友回復:
我不知道您為什么要運行for回圈,但請在下面找到使用庫中的as_edgelist()函式的可能解決方案igraph。
代表
- 您的資料
library(igraph)
library(dplyr)
set.seed(123)
n=15
data = tibble(d = paste(1:n))
relations = tibble(
from = sample(data$d),
to = lead(from, default=from[1]),
)
graph = graph_from_data_frame(relations, directed=T, vertices = data)
V(graph)$color <- ifelse(data$d == relations$from[1], "red", "orange")
plot(graph, layout=layout.circle, edge.arrow.size = 0.2)

- 建議代碼
edgelist <- as_edgelist(graph, names = TRUE)
for (i in 1:15) {
graph <- graph - edge(paste0(edgelist[i,1], "|", edgelist[i,2]))
}
plot(graph)

由reprex 包于 2022-02-24 創建(v2.0.1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/432260.html
下一篇:在不知道頁碼的情況下獲取分頁資料
