R: 控制檯的清理與輸出內容的儲存 (Clear Console & Save Console Output)
阿新 • • 發佈:2019-02-08
- 先把所有的輸入命令放到一個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.)
- sink()的full set為sink(file = NULL, append = FALSE, type = c("output", "message"), split = FALSE)
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")