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