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

如何将R数据框列转换为YAML格式的字典数组?

问题:从R数据框生成指定格式的YAML结构

想要生成如下格式的YAML:

- name: Josiah Carberry
  roles: 
    - investigation: lead 
    - data curation: supporting

其中roles是字典数组,对应R中的数据框列表。但尝试的代码生成了多余的嵌套短横线,无法得到目标格式。

尝试的R代码

library(tibble)

tibble(
  id = paste0("id", 1:2),
  roles = list(
    list(tibble(writing = "lead"), tibble(supervision = "supporting")),
    list(tibble(writing = "equal"))
  )
) |> 
  jsonlite::toJSON() |> 
  jsonlite::parse_json() |> 
  yaml::as.yaml(indent.mapping.sequence = TRUE) |> 
  cat()

生成的错误结果

- id: id1
  roles:
    - - writing: lead
    - - supervision: supporting
- id: id2
  roles:
    - - writing: equal

目标格式

- id: id1
  roles:
    - writing: lead
    - supervision: supporting
- id: id2
  roles:
    - writing: equal

解决方案

问题根源是用tibble包裹了单个键值对,导致每个role被额外套了一层列表。直接用普通命名列表定义每个role,就能消除多余的短横线。

修改后的代码(方案一)

library(tibble)

tibble(
  id = paste0("id", 1:2),
  roles = list(
    list(list(writing = "lead"), list(supervision = "supporting")),
    list(list(writing = "equal"))
  )
) |> 
  jsonlite::toJSON() |> 
  jsonlite::parse_json() |> 
  yaml::as.yaml(indent.mapping.sequence = TRUE) |> 
  cat()

更简洁的写法(方案二)

不需要嵌套双层list,直接用c()合并命名列表,生成单一层级的列表数组:

library(tibble)

tibble(
  id = paste0("id", 1:2),
  roles = list(
    c(list(writing = "lead"), list(supervision = "supporting")),
    list(writing = "equal")
  )
) |> 
  yaml::as.yaml(indent.mapping.sequence = TRUE) |> 
  cat()

两种方式都能生成符合要求的YAML格式,roles下的每个键值对只会保留一层短横线。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 01:11:23