繁体   English   中英

如何在 R 中以某种格式将 data.frame 写入 yaml 文件?

[英]How to write a data.frame to a yaml file in certain format in R?

假设我有一个 data.frame:

 x<-data.frame(files=c("/a/b/c/p1_fastq.gz", "/a/b/c/p2_fastq.gz"), ids=c("p1", "p2"))
 x
               files ids
1 /a/b/c/p1_fastq.gz  p1
2 /a/b/c/p2_fastq.gz  p2

如何将其编写为 yaml 文件test.yaml ,例如:

-
  id: "p1"
  fastq: "/a/b/c/p1_fastq.gz"
-
  id: "p2"
  fastq: "/a/b/c/p2_fastq.gz"

我已经在 R 中尝试过yaml package 但它写为

files:
-/a/b/c/p1_fastq.gz
-/a/b/c/p2_fastq.gz

我们可以使用catsprintf来粘贴元素并将其写入file

cat(with(x, sprintf('-\nid: "%s"\nfastq: "%s"\n', ids, files)),
        "\n", file = "test.yaml")

-输出

在此处输入图像描述

@akrun 的回答非常适合基础 R。 另一种方法是使用yaml package 为您做事:

library(yaml)
yaml <- as.yaml(mtcars[1:3, 1:3])
cat(yaml, "\n")
# mpg:
# - 21.0
# - 21.0
# - 22.8
# cyl:
# - 6.0
# - 6.0
# - 4.0
# disp:
# - 160.0
# - 160.0
# - 108.0

另一种方法是行优先(又名“非列优先”),其中每个列表元素代表一行

yaml <- as.yaml(mtcars[1:3, 1:3], column.major = FALSE)
cat(yaml, "\n")
# - mpg: 21.0
#   cyl: 6.0
#   disp: 160.0
# - mpg: 21.0
#   cyl: 6.0
#   disp: 160.0
# - mpg: 22.8
#   cyl: 4.0
#   disp: 108.0

虽然yaml::as.yaml推荐第一种方法( column.major=TRUE ,默认值)。

使用您的数据,其中之一

cat(as.yaml(x), "\n")
# files:
# - /a/b/c/p1_fastq.gz
# - /a/b/c/p2_fastq.gz
# ids:
# - p1
# - p2
cat(as.yaml(x, column.major = FALSE), "\n")
# - files: /a/b/c/p1_fastq.gz
#   ids: p1
# - files: /a/b/c/p2_fastq.gz
#   ids: p2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM