R: 控制台的清理与输出内容的保存 (Clear Console & Save Console Output)

来源:互联网 发布:万网中文域名注册 编辑:程序博客网 时间:2024/05/17 19:20

Part1 - 清空控制台

每个用R的人,尤其是像我这样programing 零基础的人,经常在调试自定义程序的时候会在控制台留下一大堆的error 和warning 信息,红彤彤的煞是好看哇有木有,但是为了掩盖自己的菜鸟性质,不让在身后出没的妹子看到满屏的错误,一定得找个办法掩饰啊~那要怎么清空控制台呢?

  • 二逼青年:无限按回车键
  • 文艺青年:合理应用Concatenate and Print公式cat()与换行符"\n",比如。。。
    • cat("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n")
    • cat(rep("\n",100))
  • 正常青年:看看R或者RStudio里有木有啥操作键?
    • 工具栏 →_→ Edit →_→ Clear Console
    • 同样,Clear Console功能键右边提示的快捷键为 Ctrl + L
  • 牛逼青年:命令行输入cat("\014") 同样可以实现Ctrl + L的功能
=================================~嘚瑟~嘚瑟~嘚瑟~嘚瑟~的分割线~=================================

Part2 - 保存控制台输出内容
在清空控制台前,如果想把每条输入的命令和命令得到的结果记录下来或者导出到本地,应该用什么方法呢?
  • 先把所有的输入命令放到一个script文件中,如test.R. 
  • test <- function(){  for (i in 1:5){    if (i * 2 <5){      warning(paste('when i = ', i, ", I love her!", sep = ""))    }else if (i * 2 <9){      message(paste('when i = ', i, ", I love him!", sep = ""))    }else{      stop(paste('when i = ', i, ", I love myself!", sep = ""))    }  } }test()

  • 然后用sink()来记录test()的input和output。
    • sink()的full set为sink(file = NULL, append = FALSE, type = c("output", "message"), split = FALSE)
    • 常用的三个参数为:
      • file 赋值为一个可编辑的文件,如果不给file赋值,则默认为不再使用sink()函数
      • append = T时,控制台输出的内容会定向(接续)写到file定义的文件中;反之,定向输出到file文件中的内容将覆盖前一次sink()时写入的内容
      • type既可以是输入命令在控制台中的output,也可以是命令随之产生的message (message, warning, error, etc.)
  • con <- file("test.log") # 创建一个.log文件sink(con, append=TRUE) # 记录outputsink(con, append=TRUE, type="message") # 记录message# 所有的output和message都会记录到test.log中,而控制台中不在有信息显示# 读取test.R的命令,所有的input在被解析后都会显示出来,此处会直接记录到test.log中source("test.R", echo=TRUE, max.deparse.length=10000)# 记录完毕后,重置output和message的记录,运行完一下两行,后续的输入命令重新显示到控制台中sink()sink(type="message")# 在控制台中显示test.log中记录下楼来的命令output和messagecat(readLines("test.log"), sep="\n")# 导出write.table(cat(readLines("test.log"), sep="\n"), "log.txt")
这种处理方法,可以在调试千行以上的自定义函数代码时,用以记录有可能出现但是被新出现的output和message所挤出控制台行数限制的error message。

0 0