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

使用purrr::map处理XML时如何为生成的tibble添加列表索引列

解决方案

完全可以通过tidyverse实现,无需额外写base R循环。你之前的代码出错是因为直接将两层嵌套列表交给bind_rows处理,它会把所有内层元素识别为同级列表项依次编号,.id自然变成行序号。只需调整逻辑:先给每个外层列表的所有行统一加上对应外层索引,再合并所有数据即可。

代码实现

library(tidyverse)
library(xml2)

trials %>%
  # 原有提取逻辑不变
  map(~xml_find_all(., "AdditionalData/Parameters/Parameter")) %>%
  map(~xml_attrs(.)) %>%
  # imap遍历同时获取外层索引,.x为每个测试的参数列表,.y为外层索引值
  imap_dfr(~ bind_rows(.x) %>% mutate(test = as.character(.y)))

逻辑说明

  • imap是purrr提供的带索引遍历函数,.y自动对应遍历对象的外层下标(1、2、3……即你需要的测试编号)
  • 先给同一测试的所有参数行统一添加相同的test值,再合并所有测试的数据,最终输出的结果就符合你要求的格式。

如果不习惯用imap,也可以用map2配合索引序列实现,逻辑完全一致:

param_list <- trials %>%
  map(~xml_find_all(., "AdditionalData/Parameters/Parameter")) %>%
  map(~xml_attrs(.))

map2_dfr(param_list, seq_along(param_list), ~ bind_rows(.x) %>% mutate(test = as.character(.y)))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 04:54:02