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

在R中转换嵌套列表以适配MkDocs的YAML配置需求

转换R嵌套列表为MkDocs所需的YAML嵌套列表结构

要适配MkDocs的YAML配置格式,需要将标准命名嵌套列表转换为每层键值对单独封装为列表的结构,从而生成带-标记的层级YAML。以下是可扩展的递归实现方案:

实现代码

先加载所需工具包,定义递归转换函数:

library(purrr)
library(rlang)
library(yaml)

convert_to_nested_lists <- function(x) {
  if (is.list(x) && !is.null(names(x))) {
    # 处理命名列表:每个键值对转为独立命名列表,再收集为上层列表
    map(names(x), function(k) {
      processed_value <- convert_to_nested_lists(x[[k]])
      list(!!k := processed_value)
    })
  } else if (is.list(x)) {
    # 对未命名列表的每个元素递归处理
    map(x, convert_to_nested_lists)
  } else {
    # 原子值直接返回
    x
  }
}

测试转换过程

用你的原始列表结构进行测试:

# 原始嵌套列表
nested_lists_current = list(
  census = list(
    acs = list(logrecno = 1, moe = 3, seq = 5),
    geo = list(fileid = 2, geoid = 4, macc = 6)
  )
)

# 执行转换
result <- convert_to_nested_lists(nested_lists_current)

# 查看转换后的结构(与理想结构一致)
str(result)

生成目标YAML格式:

cat(as.yaml(result))

输出结果完全符合需求:

- census:
  - acs:
    - logrecno: 1.0
    - moe: 3.0
    - seq: 5.0
  - geo:
    - fileid: 2.0
    - geoid: 4.0
    - macc: 6.0

方案说明

  1. 可扩展性:递归逻辑会自动遍历所有嵌套层级,无论后续新增多少子列表或键值对,都能生成符合要求的结构。
  2. 为什么不用map_depth:map_depth仅能针对固定层级处理,无法适配动态变化的嵌套深度,递归方案则能覆盖所有命名列表层级,确保每个键值对都被正确封装为独立列表项。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 07:34:54