首页 > 解决方案 > R中的深度优先递归

问题描述

我正在使用数据集更新这个问题,以便我可以获得更多帮助(基于反馈)。我不是要求人们做我的功课,但肯定会感谢任何指示。

我有以下代码

>> start of code
# BOM data
library("dplyr")
library(igraph)

text1 <- ("
          matnr,comp
          FG1,SA1
          FG1,SA2
          SA1,SA3
          SA1,SA4
          SA1,SA5
          SA5,SA6
          FG2,SA1
          FG2,SA8
          SA8,SA9
          SA9,SA10
          SA9,SA11")

df1 <- read.table(textConnection(text1),  header = TRUE, stringsAsFactors=FALSE, strip.white = TRUE, sep=",")
head(df1)
net <- graph_from_data_frame(df1)
net
neighbors_FG1 <- neighbors(net, v=c("FG1"), mode=c("out"))
neighbors_FG1

neighbors_FG2 <- neighbors(net, v=c("FG2"), mode=c("out"))
neighbors_FG2            

neighbors_SA1 <- neighbors(net, v=c("SA1"), mode=c("out"))
neighbors_SA1

>> end of code

我希望能够生成如下所示的数据框。我认为这需要某种递归,我想得到帮助。如果您甚至可以帮助我了解如何获得下面的输出,那就太好了。

FG,level,material,Comp FG1,1,FG1,SA1
FG1,1,FG1,SA2
FG1,2,SA1,SA3
FG1,2,SA1,SA4
FG1,2,SA1,SA5
FG1,3,SA5,SA6
FG2 ,1,FG2,SA1
FG2,1,FG2,SA8
FG2,2,SA8,SA9

标签: rigraph

解决方案


希望这可以帮助你(使用虚拟数据df

df <- data.frame(
  from = c("A", "A", "A", "B"),
  to = c("B", "C", "D", "C")
)
net <- graph_from_data_frame(df)
v <- vall <- "A"
while (length(unique(unlist(vall))) < vcount(net)) {
  p <- neighbors(net, v)
  vall <- c(vall, list(names(p)))
  v <- p
}

这使

> vall
[[1]]
[1] "A"

[[2]]
[1] "B" "C" "D"

或者,您可以使用dfs

> dfs(net, "A")
$root
[1] 0

$neimode
[1] "out"

$order
+ 4/4 vertices, named, from 9d73ae8:
[1] A B C D

$order.out
NULL

$father
NULL

$dist
NULL

在此处输入图像描述


推荐阅读