使用R语言as.yaml函数时,如何输出TRUE/FALSE而非yes/no?
R yaml包as.yaml布尔值转yes/no的问题分析与解决
原因
R的yaml包默认遵循YAML 1.1规范,该规范允许yes/no作为布尔值的合法表示,as.yaml()函数默认会将R中的TRUE/FALSE序列化为yes/no。如果直接使用字符串"TRUE",YAML会将其识别为带引号的字符串,不符合布尔值的格式要求。
解决方法
方法1:自定义布尔值序列化处理器
通过as.yaml()的handlers参数,为逻辑类型指定自定义输出格式,直接生成大写的TRUE/FALSE:
library(yaml) # 定义布尔值的自定义处理函数 bool_handler <- function(x) { if (x) return("TRUE") else return("FALSE") } x <- list(test = list(a = TRUE)) yaml <- as.yaml(x, handlers = list(logical = bool_handler)) cat(yaml, sep = "\n") #> test: #> a: TRUE
方法2:全局设置布尔值序列化规则
如果需要让所有as.yaml()调用都生效,可以修改全局的YAML选项,指定逻辑类型的序列化函数:
library(yaml) # 设置全局布尔值序列化规则 yaml.options(logical.as.yaml = function(x) ifelse(x, "TRUE", "FALSE")) x <- list(test = list(a = TRUE)) cat(as.yaml(x), sep = "\n") #> test: #> a: TRUE
注:YAML 1.2规范仅承认小写的
true/false为布尔值,但大多数现代YAML解析器也兼容大写的TRUE/FALSE。如果需要严格符合YAML 1.2标准,只需将处理函数的返回值改为"true"/"false"即可。
内容的提问来源于stack exchange,提问作者Quinten
相关产品推荐
相关产品推荐

