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

使用data.tree构建树时子节点错误关联至非预期父节点的问题排查

问题原因及解决方法

问题出在treeToList函数的Map调用顺序错误。R语言中Map函数的语法是Map(函数, 迭代对象),你当前把node$children(迭代对象)放在了第一个参数位置,把要执行的treeToList函数放在了f参数里,完全颠倒了调用逻辑,导致子节点生成逻辑混乱,最终出现节点关联错误。

修正后的代码

只需要调整children部分的调用逻辑,改用更直观的lapply,或者修正Map的参数顺序即可:

library(data.tree)
data <- data.frame(
  Name = c("A", "A1", "A2", "A1a", "A1b", "A2a", "A2b", "A2c","B"),
  Path = c("1", "1,a", "1,b", "1,a,1", "1,a,2", "1,b,1", "1,b,2", "1,b,3","2")
)

my_tree <- data %>%
  rowwise() %>%
  mutate(pathString = strsplit(Path, ',') %>% unlist() %>% paste(collapse = '/')) %>%
  as.Node()

treeToList <- function(node) {
  list(
    text = node$Name,
    li_attr = list(id = node$Path),
    state = list(opened = TRUE),
    # 改用lapply更直观
    children = lapply(node$children, treeToList)
    # 也可以写成修正后的Map调用:children = Map(f = treeToList, node$children)
  )
}

treeToList(my_tree)

修正后的结果

此时生成的树结构会符合预期:

  • 节点1(Name="A")的子节点是1,a(Name="A1")和1,b(Name="A2")
  • 节点2(Name="B")是独立的根节点,不会错误关联其他子节点

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 16:43:16