首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >根据完成的递归次数限制递归函数

根据完成的递归次数限制递归函数
EN

Stack Overflow用户
提问于 2019-03-04 01:50:03
回答 1查看 51关注 0票数 0

我有一个从数据库中提取数据的递归函数。数据库很大,递归需要一段时间,最终会以错误结束,因为我已经超出了堆栈。我正在尝试调试函数,所以我想限制递归,这样我就可以在堆栈错误发生之前查看结果。

下面是函数。如何对其设置递归限制?(df$relatedIdEx只是数据帧中的一个字符串,用作查找新数据帧的字符串)。如果字符串已经被查找,那么它是跳过的-这是为了防止无限循环

代码语言:javascript
复制
get_all_dfs <- function(df) {
  lapply(df$relatedIdEx, function(elem) {
    if (as.character(unlist(elem)) %in% already_lookedup) {
      print(paste("Already looked up ",elem," and skipping!"))
      return (NULL)
    } else {
      already_lookedup <<- c(already_lookedup,as.character(unlist(elem)))
    }
    next_df <- myGIConcepts(elem)

    #next_df_list<-list(next_df,my_env)
    if (nrow(next_df)>1) {
      get_all_dfs(next_df)
    } else {
      thelist<-df
    }
  })
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-04 03:11:35

您可以将计数器传递给函数,它会更干净一些,比如get_all_dfs <- function(df,counter)。但是你的问题暗示了一个快速的解决方案。按如下方式添加一个计数器。注您也可以在lapply中移动它,这可能取决于您希望计数器位于的位置或要中断的位置。

代码语言:javascript
复制
counter <- 0
get_all_dfs <- function(df) {
  counter <<- counter+1
  if (counter > 100) return (NULL)

  lapply(df$relatedIdEx, function(elem) {
    if (as.character(unlist(elem)) %in% already_lookedup) {
      print(paste("Already looked up ",elem," and skipping!"))
      return (NULL)
    } else {
      already_lookedup <<- c(already_lookedup,as.character(unlist(elem)))
    }
    next_df <- myGIConcepts(elem)

    #next_df_list<-list(next_df,my_env)
    if (nrow(next_df)>1) {
      get_all_dfs(next_df)
    } else {
      thelist<-df
    }
  })
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54971861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档