2011-06-15 72 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

相關問題