2011-06-15 73 views
3

我想从R制作yaml格式文件。我知道有这样的工作包,但它的例子是如此简单,我的对象有点棘手!制作一个复杂的yaml从R

,所以我想提出类似下面的,但我不知道我应该如何塑造它为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 

回答

4

我短的建议 - 不要用YAML与R.

(编者注:看来,这里记载,至今已修复的问题 - 见注释)。

1期

R中的yaml包似乎不可用,但真正的问题似乎与R有关。但是,再次,直到我看到这个问题时,我才对yaml感到困扰,所以可能在我对整个问题。

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

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

因此,存在不能列表的载体,其为不是列表,我们有严重的问题,将数据变换和从YAML在R.

问题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) 

正如你所看到的,它不起作用。我想你可以通过不尝试与R使用yaml来节省很多痛苦。你可以考虑使用XML或类似的东西。

+0

我与其开发人员联系,他修复了错误,现在,用你的方法它工作得很好 – user702846 2011-06-23 06:32:59

+0

你能告诉我他是如何修复这个bug的吗?如果可以修复这些问题,我想自己开始使用yaml。 – Soumendra 2011-06-23 10:57:21

+0

哦,你可以做str(z)来查看你从yaml生成的对象的结构。再次,请你告诉我们yaml软件包的作者对此有何评论? – Soumendra 2011-06-24 07:04:14

相关问题