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

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) # 记录output
    sink(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和message
    cat(readLines("test.log"), sep="\n")
    
    # 导出
    write.table(cat(readLines("test.log"), sep="\n"), "log.txt")
    
     
这种处理方法,可以在调试千行以上的自定义函数代码时,用以记录有可能出现但是被新出现的output和message所挤出控制台行数限制的error message。

  • 14
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值