如何在R的glue包中抑制空变量生成的换行?
解决Glue模板中NA值导致空行的问题
要解决变量为NA时生成空行的问题,核心是让包含变量的整行内容(包括换行)仅在变量非NA时才输出,而非先输出换行再将变量替换为空。可以通过Glue的条件表达式实现:
修改后的模板与代码
library(glue) library(tibble) # 对可能为NA的字段添加条件判断,仅当非NA时输出对应行 glue_template <- "\n ### \n {title}\n {if (!is.na(loc)) glue('\n {loc}')}\n {if (!is.na(company)) glue('\n {company}')}\n" dat = tribble( ~title, ~loc, ~company, "intern", "seattle", "escience", "intern", NA, "posit" ) # 渲染模板 glue_data(dat, glue_template, .na = "")
输出结果
### intern seattle escience ### intern posit
原理说明
原模板中每个字段的换行是固定存在的,即便变量被替换为空字符串,换行符依然保留,最终形成空行。通过if (!is.na(变量)) glue('\n {变量}')的写法,只有当变量非NA时,才会生成包含换行和变量内容的字符串;若变量为NA,则该部分直接输出空,不会留下多余换行。
如果字段较多,也可以用glue_collapse结合列表的方式,自动跳过空值,写法更简洁:
glue_template <- "\n ### \n {title}\n {glue_collapse(c(if(!is.na(loc)) loc, if(!is.na(company)) company), sep = '\n ')}\n"
内容的提问来源于stack exchange,提问作者Ihsan Kahveci
相关产品推荐
相关产品推荐

