使用查找列表补全带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
相关产品推荐
相关产品推荐

