我试图创建一个函数来找到所有可能的路径(我将从现在开始在子路径上调用它们)最多三个一组(父节点+两个子节点)。这意味着,如果有A,B,C,D
这样的途径我应该作为子路径A,B,C
B,C,D
C,D
和D
获得,但我相信理想情况下我不愿意得到最后两个因为那些已经在前面的子路径中表示。我希望所有子路径都包含在列表subpaths
中。
我创建了一个玩具邻近矩阵,填充0和1,其中o表示节点之间没有连接,1表示连接。作为父节点的行名称和子节点的列名称。
nombre <- c("A", "B", "C", "D", "E", "F")
Mprueba <- matrix(c(0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0), ncol = 6)
colnames(Mprueba) <- nombre
row.names(Mprueba) <- nombre
这是我正常工作的最接近的功能,它似乎遍历所有节点,并且我已经测试过在函数中放置一些打印件,它似乎按预期执行。这只是一个脚手架,我没有在下面的代码中给出任何回报,因为它们都没有按预期工作。
subpaths_3_nodes <- function(matriz, i = 1, subpaths , subpath3){
subpath3 <- c(subpath3, row.names(matriz)[i])
if (sum(as.numeric(matriz[i,])) == 0){
subpaths <- c(subpaths, list(subpath3))
subpath3 <- c()
}
if (length(subpath3) >= 3){
subpaths <- c(subpaths, list(subpath3))
subpath3 <- c()
for (edge in which(as.numeric(matriz[i,]) == 1)){
subpaths_3_nodes(matriz, edge, subpaths, subpath3)
}
}
}
然后我通过将它放在一个遍历矩阵所有行的循环中来运行该函数。我也用它内部的循环创建了函数,但我无法使其正常工作。
subpath3 = c()
subpaths = list()
for (i in 1:dim(matriz)[1]){subpaths_3_nodes(matriz,i, subpaths, subpath3)}
我上面的代码只是一个脚手架(它可能缺少一些return
函数),因为我创建了它的几个版本,没有一个给我预期的输出,我希望它有所帮助。
感谢您的时间,感谢抱歉这篇杂乱的帖子。