1. 程式人生 > >R: 控制檯的清理與輸出內容的儲存 (Clear Console & Save Console Output)

R: 控制檯的清理與輸出內容的儲存 (Clear Console & Save Console Output)

  • 先把所有的輸入命令放到一個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")