2015-03-10 3 views
0

Мне нужно «очистить» график в R. Чистым я имею в виду, что мне нужно удалить все узлы, которые не связаны с конкретным. Например, если в моем графике есть 4 узлов, с этими краями:Очистка графика с помощью R-пакета «igraph»

  • 1 до 3

  • 1 до 2

  • 4 до 2

I хотите сохранить только узлы, связанные с краями 1, а также сами края 1, так что мне нужно удалить края 4.

Есть ли способ с помощью igraph построить алгоритм, который может сделать это для очень очень большого графика (например, более 1000 узлов и 1 000 000 ребер)?

ответ

1

subcomponent Использование и induced.subgraph:

edges_df <- data.frame(from = c(1, 1, 4), to = c(3, 2, 2)) 
g1 <- graph.data.frame(edges_df, directed = TRUE) 

g2 <- induced.subgraph(g1, subcomponent(g1, "1", mode = "out")) 

Что касается "больших" графиков: 1000 не столь велика. На моем ноутбуке:

system.time({ 
    g3 <- graph.full(n = 1000, directed = TRUE) 
    g4 <- induced.subgraph(g3, subcomponent(g3, "1", mode = "out")) 
}) 
# user system elapsed 
# 0.47 0.10 0.57 
Смежные вопросы