Мой короткий совет - не используйте yaml с R.
(Примечание редактора: похоже, что проблемы, задокументированные здесь, с тех пор были исправлены - см. Комментарии.)
Выпуск 1
Пакет yaml в R кажется непригодным для использования, но реальная проблема, похоже, связана с 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)
как вы видите, это не работает. Я думаю, что вы можете избавить себя от боли, не пытаясь использовать yaml с R. Вы могли бы подумать об использовании XML или чего-то подобного.