R语言使用sink导出文本文件出现异常字符的问题咨询
问题原因
你看到的[38;5;246m这类奇怪字符是ANSI转义序列,是R控制台用来给文本上色、设置字体格式(斜体、下划线)的控制码,控制台能识别这些码显示格式,但纯文本文件不会解析,就会原样保留下来。
这里输出带ANSI码是因为你用到了tibble格式的输出,infer包返回的prop_test结果是tibble,而tidyverse系列包默认会开启彩色输出,输出到非控制台的文件时也会默认携带这些格式码。
解决方法
可以任选以下任意一种方案解决:
- 方案1:全局关闭ANSI格式输出
在运行sink前加一行代码,关闭所有ANSI颜色和格式输出:
options(crayon.enabled = FALSE)
如果后续需要恢复控制台彩色输出,跑完sink代码后再改回options(crayon.enabled = TRUE)即可。
- 方案2:打印tibble时强制关闭颜色
不用改全局设置,只在打印结果的时候调用print()的参数关闭格式,把循环里的print(out[i])改成:
print(out[i], num_colors = 0)
这个参数是tibble的print方法自带的,num_colors=0就会输出无格式的纯文本。
- 方案3:转换为普通data.frame再打印
如果不需要保留tibble的输出格式,也可以转成基础的data.frame再打印,天然不带ANSI码:
print(as.data.frame(out[i]))
内容的提问来源于stack exchange,提问作者NewBee
相关产品推荐
相关产品推荐

