【发布时间】:2020-11-17 01:34:02
【问题描述】:
我正在尝试在 YAML、列表和数据框之间进行转换。我有一个如下所示的 YAML:
sheet1:
var1:
type: character
description: description for my var1
var2:
type: character
description: description for my var2
sheet2:
var3:
type: character
description: description for my var3
var4:
type: character
description: description for my var4
我正在阅读它并使用以下脚本转换为数据框:
library(yaml)
library(tidyverse)
yaml_file <- yaml::read_yaml("yaml.yaml")
mydf <- yaml_file %>% map(bind_rows) %>% bind_rows(.id = "sheet")
在某些情况下,我需要将数据帧转换回我原来的 YAML。以下是我目前不成功的尝试。
a <- split(mydf, mydf$sheet)
b <- lapply(a, function(x) split(x, f = x[["var"]]))
c <- rapply(b, as.list, how = "list")
cat(as.yaml(c)) # Not the same as my input
【问题讨论】:
-
您可能无法回到原来的状态,因为在绑定列表时,您会丢弃名称
-
小评:
data.table和tidyverse语法最好不要混用;tidyverse方式将是mydf <- yaml_file %>% map(bind_rows) %>% bind_rows(.id = "sheet")。 -
@RonakShah,输出如下:
list(sheet1 = list(var1 = list(type = "character", description = "description for my var1"), var2 = list(type = "character", description = "description for my var2")), sheet2 = list(var3 = list(type = "character", description = "description for my var3"), var4 = list(type = "character", description = "description for my var4")))