我不懂图论,所以恐怕题的题目不是性质公式化的,所以我会给出一个代码:

library(magrittr)
library(igraph)

df <- data.frame(from = c(1, 1, 2, 2, 6),
                 to = c(2, 4, 3, 5, 3))

graph_from_data_frame(df) %>% 
  components() %>% 
  membership() %>% 
  stack()
#>   values ind
#> 1      1   1
#> 2      1   2
#> 3      1   6
#> 4      1   4
#> 5      1   3
#> 6      1   5


# find only "direct" paths

data.frame(values = c(1, 1, 2, 1, 1, 1, 2),
           ind = c(1, 2, 6, 4, 3, 5, 3))
#>   values ind
#> 1      1   1
#> 2      1   2
#> 3      2   6
#> 4      1   4
#> 5      1   3
#> 6      1   5
#> 7      2   3

有了上面的data.frame,我知道如何找到所有连接的组件,无论它们是如何连接的.但我也希望能够找到上面代码块末尾所示的东西,即"6"不属于组"1",但与"3"相连,这就是为什么我重复"3"-它属于组"1"和"2".

igraphR中的其他套餐中有这样的功能吗?但我更喜欢igraph美元.这个过程在图论中有名字吗?因此,我将能够找到更多关于这方面的信息.

EDIT

感谢大家的帮助.我发现,对于我的用例,我可以使用igraph::subcomponent()(我以前在igraph::component()帮助页面的底部没有找到这个函数),因为我曾经只需要为一个选定的顶点查找组件,并且我知道我是否需要查找所有连接的组件或只查找"简单路径"组件,幸运的是,在第二种情况下,它总是路径的顶点"末尾"(开始?)

df <- data.frame(react_id = c("r1", "r1", "r2", "r2", "r6"),
                 depends_on = c("r2", "r4", "r3", "r5", "r3"))

gdf <- igraph::graph_from_data_frame(df)

# get all connected components for specific react_id

igraph::subcomponent(gdf, "r3", "all") |>
  names()
#> [1] "r3" "r2" "r6" "r1" "r5" "r4"

# get "simple paths" components

igraph::subcomponent(gdf, "r1", "out") |>
  names()
#> [1] "r1" "r2" "r4" "r3" "r5"

推荐答案

像这样的吗?

suppressPackageStartupMessages(
  library(igraph)
)

df <- data.frame(from = c(1, 1, 2, 2, 6),
                 to = c(2, 4, 3, 5, 3))

g <- df |> graph_from_data_frame()
i <- g |> degree(mode = "out") > 0

lapply(V(g)[i], \(x) all_simple_paths(g, from = x, mode = "out"))
#> $`1`
#> $`1`[[1]]
#> + 2/6 vertices, named, from c3ceef6:
#> [1] 1 2
#> 
#> $`1`[[2]]
#> + 3/6 vertices, named, from c3ceef6:
#> [1] 1 2 3
#> 
#> $`1`[[3]]
#> + 3/6 vertices, named, from c3ceef6:
#> [1] 1 2 5
#> 
#> $`1`[[4]]
#> + 2/6 vertices, named, from c3ceef6:
#> [1] 1 4
#> 
#> 
#> $`2`
#> $`2`[[1]]
#> + 2/6 vertices, named, from c3ceef6:
#> [1] 2 3
#> 
#> $`2`[[2]]
#> + 2/6 vertices, named, from c3ceef6:
#> [1] 2 5
#> 
#> 
#> $`6`
#> $`6`[[1]]
#> + 2/6 vertices, named, from c3ceef6:
#> [1] 6 3

reprex package(v2.0.1)于2022-09-04创建

R相关问答推荐

如果窗口在CLARME或集团之外,则有条件领先/滞后滚动总和返回NA

从具有随机模式的字符串中提取值

为什么以及如何修复Mapview不显示所有点并且st_buffer合并一些区域R?

具有多个依赖变量/LHS的逻辑模型

R箱形图gplot 2 4组但6个参数

pickerInput用于显示一条或多条geom_hline,这些线在图中具有不同 colored颜色

gt()从gt为相同内容的单元格 colored颜色 不同?

如何删除gggvenn与gggplot绘制的空白?

R s iml包如何处理语法上无效的因子级别?'

如何使用tryCatch执行语句并忽略警告?

根据列A中的差异变异列,其中行由列B中的相对值标识

LOF中的插图短文字幕

`lazy_dt`不支持`dplyr/across`?

如何识别倒排的行并在R中删除它们?

减go R中列表的所有唯一元素对

解析嵌套程度极高的地理数据

自定义交互作用图的标签

了解nchar在列表上的意外行为

带有Bootswatch Cerulean主题的shiny 仪表板中的浏览&按钮可见性问题

创建两个变量组合的索引矩阵