【问题标题】:making a complex yaml from R从 R 制作复杂的 yaml
【发布时间】:2011-06-15 21:47:14
【问题描述】:

我正在尝试从 R 制作 yaml 格式文件。我知道有这样一个工作包,但它的示例非常简单,我的对象有点棘手!!

所以我想做类似下面的东西,但我不知道我应该如何将它塑造成 R 对象(数据框?!):

tree:
  format: newick
  translate: ./My_example-1.translation
  file: ./Xtol_example-1.tree
tracks:
  - class: colorstrip
    source: ./My_example-1.catdomain

    rel_height: 0.6
    title: Catalytic domain
  - class: colorstrip
    source: ./My_example-1.kingdom
    rel_height: 0.6
    title: Itsname
  - class: colorstrip
    source: ./My_example-1.temp

【问题讨论】:

    标签: r yaml dataframe


    【解决方案1】:

    我的简短建议 - 不要将 yaml 与 R 一起使用。

    (编者注:此处记录的问题似乎已得到修复——请参阅 cmets。)

    问题 1

    R 中的 yaml 包似乎无法使用,但真正的问题似乎出在 R 上。但话说回来,在看到这个问题之前,我并没有理会 yaml,所以我对整个问题。

    为了成功创建有问题的 yaml,在某些时候,我们必须有一个不是列表的列表向量(对于 tracks)。我认为在 R 中没有办法做到这一点。只要我们将元素添加到作为列表的向量中,向量就会变成一个列表。我猜一个向量只能采用固定大小的元素(因此简化了操作,因此具有良好的性能和大量的向量化建议)。

    对于简单的原子类型,如数字、整数等,我想 R 解释器已经知道它们的大小(这是固定的)。但是如果元素是一个列表,那么这种奢侈就没有了,向量被转换为一个列表,以便它可以处理不同大小的元素(列表)。

    因此,不能存在不是列表的列表向量,并且我们在 R 中将数据与 yaml 进行转换时遇到严重问题。

    问题 2

    R yaml 包的文档记录很差,我不知道它是如何解决问题的。我猜想它可能使用约定来绕过它。所以我试图做的是这个(这种方法也可以解决你的问题) - 将 yaml 作为 R 对象导入,然后尝试将该 R 对象转换为 yaml。

    library("yaml")
    z <- yaml.load(
    "tree:
      format: newick
      translate: ./My_example-1.translation
      file: ./Xtol_example-1.tree
    tracks:
      - class: colorstrip
        source: ./My_example-1.catdomain
    
        rel_height: 0.6
        title: Catalytic domain
      - class: colorstrip
        source: ./My_example-1.kingdom
        rel_height: 0.6
        title: Itsname
      - class: colorstrip
        source: ./My_example-1.temp")
    names(z)
    names(z$tracks)
    y <- as.yaml(z)
    

    如您所见,它不起作用。我认为您可以通过不尝试将 yaml 与 R 一起使用来为自己节省很多痛苦。您可以考虑使用 XML 或类似的东西。

    【讨论】:

    • 我联系了它的开发者,他修复了这个错误,现在,用你的方法效果很好
    • 你能告诉我他是如何修复这个错误的吗?如果可以解决这些令人头疼的问题,我想自己开始使用 yaml。
    • 哦,你可以执行 str(z) 来查看你从 yaml 生成的对象的结构。再说一遍,你能告诉我们 yaml 包的作者对此有什么看法吗?
    • 我希望在答案下方有关于评论的通知......这是他通过电子邮件告诉我的内容:感谢您向我指出这一点。我已经修复它并向 CRAN 提交了一个新版本。希望它会在接下来的几天内可用。如果您需要立即更新版本,可以按照此处的说明进行安装:biostat.mc.vanderbilt.edu/wiki/Main/YamlR#Installation
    • 上面的例子现在可以正常工作了。也许这是一个包不断发展的例子,但我在 2012 年没有遇到任何问题。
    猜你喜欢
    • 1970-01-01
    • 2021-04-12
    • 1970-01-01
    • 1970-01-01
    • 2017-06-13
    • 2023-04-07
    • 2023-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多