首页 > 解决方案 > 递归搜索嵌套 R6 树中的节点 - 如何打破循环?

问题描述

我正在尝试在 R 中实现类似于以下内容的搜索算法,该算法在嵌套的 R6 类树中搜索节点:

search = function(node){
  if (private$name == node){
    self
  } else {
    if(all(!is.na(private$list))){
      for (i in 1:length(private$list)){
        private$list[[i]]$search(node)
      }
    } 
  }
}

在这里,搜索是 R6 类“节点”的公共功能。此类具有私有名称和其他节点的私有列表 - 因此它是嵌套树 R6 类的父节点。

问题是算法访问了正确的节点,但函数无法生成输出,因为嵌套循环没有中断,并且它继续循环遍历所有节点,直到它访问所有节点。使用return(self)似乎没有什么不同。

有没有办法通过访问父级的属性等来打破外循环?

我非常感谢任何帮助!

标签: rtreenested-loopsnested-listsr6

解决方案


我不太清楚您希望实现什么,但也许这可以解决它:


      for (i in 1:length(private$list)){
        n <- private$list[[i]]$search(node)
        if(!is.null(n)) {
          return(n)
        }
      }


推荐阅读