Я хотел бы создать собственный YAML с функцией as.yaml. Каким-то образом он преобразует значения TRUE/FALSE в да/нет. Вот воспроизводимый код:
library(yaml)
x <- list(test = list(a = TRUE))
yaml <- as.yaml(x)
cat(yaml, sep = "\n")
#> test:
#> a: yes
Как вы можете видеть, значение TRUE теперь равно «да» в yaml. Если мы используем «ИСТИНА» вместо «ИСТИНА», оно преобразуется в «ИСТИНА», но я не хочу, чтобы оно было в кавычках. Мой ожидаемый результат выглядит так:
test:
a: TRUE
Поэтому мне было интересно, знает ли кто-нибудь, почему это происходит и как это исправить?
См. этот выпуск GitHub . Судя по всему, то, о чем вы просите, теперь можно достичь с помощью обработчиков. Обратите внимание, что в этом не будет необходимости, если вы используете тот же пакет для повторной загрузки файла YAML. В YAML 1.1 (но не в 1.2+) yes/no были указаны как эквиваленты true/false, а пакет as.yaml по умолчанию анализирует yes/no соответственно как логические значения. Так что это проблема только в том случае, если вы хотите использовать файл YAML с другим программным обеспечением, которое этого не делает.
Привет @CherryDT, Спасибо за ваш комментарий! Использование handlers кажется подходящим вариантом. Когда я использую handlers = list(logical=verbatim_logical), он теперь преобразует yes в true, что намного лучше, спасибо!





Как упоминал @CherryDT в комментариях, мы могли бы использовать обработчики для преобразования да/нет в true/false следующим образом:
library(yaml)
x <- list(test = list(a = TRUE))
yaml <- as.yaml(x, handlers = list(logical=verbatim_logical))
cat(yaml, sep = "\n")
#> test:
#> a: true
Created on 2024-06-13 with reprex v2.1.0
Если вы используете
"TRUE", это строка, которую необходимо заключить в кавычки, чтобы ее можно было отличить от логического значения.