在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
方案说明
- 可扩展性:递归逻辑会自动遍历所有嵌套层级,无论后续新增多少子列表或键值对,都能生成符合要求的结构。
- 为什么不用
map_depth:map_depth仅能针对固定层级处理,无法适配动态变化的嵌套深度,递归方案则能覆盖所有命名列表层级,确保每个键值对都被正确封装为独立列表项。
内容的提问来源于stack exchange,提问作者Jade Elkins
相关产品推荐
相关产品推荐

