使用R的sink()函数输出ANOVA结果到txt文件时出现异常符号问题
R sink()输出统计结果乱码解决方案
你遇到的乱码本质是rstatix、tidyverse系列包输出tibble类对象时,自带的ANSI控制台着色控制字符:这类字符在RStudio控制台会被解析为彩色高亮样式,但写入纯文本文件后无法被解析,就会显示为乱码符号。
修复方法
方法1:临时关闭ANSI着色输出
在调用sink前新增两行配置,关闭全局的R控制台彩色输出功能,输出完成后可恢复默认配置:
# 写入前关闭彩色输出 options(cli.num_colors = 1, crayon.enabled = FALSE, tibble.width = Inf) # 原有输出逻辑 sink(file, encoding = "UTF-8") # 可显式指定编码适配Ubuntu系统 print(title) print("SUMMARY STATISTICS") print("") print("Summary grouped by factor ' roi'") data %>% group_by(roi) %>% get_summary_stats(value, type = "mean_sd") print("") print("Summary grouped by factor 'mA'") data %>% group_by(mA) %>% get_summary_stats(value, type = "mean_sd") print("") print("Summary grouped by both factors") data%>% group_by(roi,mA) %>% get_summary_stats(value, show = c("mean", "sd", "se", "median")) sink() # 可选:输出完成后恢复默认彩色输出配置 options(cli.num_colors = 256, crayon.enabled = TRUE)
方法2:打印时转为base数据框
将所有get_summary_stats()返回的tibble对象转为普通data.frame再打印,base数据框的打印逻辑不会生成ANSI控制字符,不需要修改全局配置:
# 示例:单分组统计输出修改 data %>% group_by(roi) %>% get_summary_stats(value, type = "mean_sd") %>% as.data.frame() %>% print()
所有统计表格输出的代码段都做相同修改即可。
方法3:用专门的表格格式化函数输出
如果需要更高可读性的纯文本表格,可使用knitr::kable()格式化结果,天然无冗余控制字符:
library(knitr) sink(file, encoding = "UTF-8") # 示例输出 print("Summary grouped by factor ' roi'") data %>% group_by(roi) %>% get_summary_stats(value, type = "mean_sd") %>% kable() sink()
内容的提问来源于stack exchange,提问作者Tamara
相关产品推荐
相关产品推荐

