从R做一个复杂的yaml

时间:2011-06-15 21:47:15

标签: r yaml dataframe

我正在尝试从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

2 个答案:

答案 0 :(得分:4)

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

(编者注:此处记录的问题似乎已经修复 - 请参阅评论。)

第1期

R中的yaml软件包似乎无法使用,但真正的问题似乎与R有关。但话又说回来,在看到这个问题之前,我没有对yaml感到困扰,所以我对这个问题的理解可能存在差距。整个问题。

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

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

因此,不能存在列表的向量而不是列表,并且我们在R中将数据转换为yaml和从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或类似的东西。

答案 1 :(得分:2)

来自CRAN:

http://cran.r-project.org/web/packages/yaml/index.html

我不确定您的原始数据是什么样的,但希望这可以帮助您入门。