You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用查找列表补全带search标记的文档树并调整level层级

解决方案

示例数据

首先定义待处理的文档树列表和用于补全的查找列表:

# 待补全的文档树列表(部分条目标记search=1)
doc_trees <- list(
  # 完整条目
  data.frame(
    id = "A1",
    level = 1,
    search = 0,
    name = "文档A",
    stringsAsFactors = FALSE
  ),
  # 不完整条目
  data.frame(
    id = "B2",
    level = 2,
    search = 1,
    name = "文档B子项",
    stringsAsFactors = FALSE
  ),
  # 不完整条目
  data.frame(
    id = "C3",
    level = 3,
    search = 1,
    name = "文档C子子项",
    stringsAsFactors = FALSE
  )
)

# 存储完整文档树的查找列表
list_lookup <- list(
  data.frame(
    id = "B2",
    level = c(1,2,3),
    name = c("文档B", "文档B子项", "文档B子子项"),
    stringsAsFactors = FALSE
  ),
  data.frame(
    id = "C3",
    level = c(1,2,3),
    name = c("文档C", "文档C子项", "文档C子子项"),
    stringsAsFactors = FALSE
  )
)

补全逻辑与purrr::map实现

核心处理步骤:

  • 检查条目状态: 判断当前文档树是否包含search=1的不完整标记
  • 匹配完整树: 根据条目的id在list_lookup中找到唯一对应的完整文档树
  • 调整层级: 计算层级偏移量(原条目层级 - 匹配树的最小层级),将匹配树的所有层级加上该偏移量
  • 返回结果: 补全后的完整树替换原不完整条目,完整条目直接返回

用purrr::map实现的代码:

library(purrr)
library(dplyr)

complete_doc_trees <- map(doc_trees, function(tree) {
  # 检查是否需要补全
  if (any(tree$search == 1)) {
    # 获取当前条目的唯一标识和目标起始层级
    target_id <- tree$id[1]
    target_level <- tree$level[1]
    
    # 在查找列表中匹配对应完整树
    matched_tree <- list_lookup %>% 
      keep(~ .x$id[1] == target_id) %>% 
      pluck(1)
    
    # 计算层级偏移量并调整
    level_offset <- target_level - min(matched_tree$level)
    matched_tree %>% mutate(level = level + level_offset)
  } else {
    # 完整条目直接返回
    tree
  }
})

期望输出

执行上述代码后,补全的文档树列表结果如下:

# 查看补全结果
complete_doc_trees

输出内容:

[[1]]
   id level search    name
1 A1     1      0 文档A

[[2]]
   id level        name
1 B2     2        文档B
2 B2     3    文档B子项
3 B2     4 文档B子子项

[[3]]
   id level        name
1 C3     3        文档C
2 C3     4    文档C子项
3 C3     5 文档C子子项

内容的提问来源于stack exchange,提问作者ava

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 19:18:34