2014-09-11 22 views
5

如何將某些代碼的輸出吸收到變量中?我想要那個輸出仍然去控制檯。如何在R中將控制檯輸出複製/分割/複製到變量中?

我更喜歡sink表示法;我不想使用capture.output有兩個原因:

  1. 它需要各自的代碼是單個函數;我不想讓我的代碼複雜化,只是爲了捕獲輸出而創建函數
  2. 它不允許捕獲的輸出仍然轉到控制檯。

我想出了下面的代碼,但它有點複雜。有更簡單的解決方案嗎?

fileName <- tempfile() 
sink(fileName, split = TRUE) 
... 
sink() 
out <- readChar(fileName, file.info(fileName)$size) 
unlink(fileName) 
+0

也許可以使用'%>%'(magrittr)或'%>>%'(pipeR)將發送給控制檯的內容複製到後續的'write'操作中?或者,也許這是你在'magrittr'之前發佈'%tee%'操作符:-)的機會。見http://www.r-statistics.com/2014/08/simpler-r-coding-with-pipes-the-present-and-future-of-the-magrittr-package/ – 2014-09-11 11:29:03

+0

你應該只使用'徒勞.logger'它做了一切加上額外的 – statquant 2016-10-27 18:30:03

回答

1

您的代碼似乎並沒有那麼糟糕,但你可以通過使用簡化的東西一點點textConnection

sink(tt <- textConnection("results","w"),split=TRUE) 
print(11:15) 
## [1] 11 12 13 14 15 
sink() 
results 
## [1] "[1] 11 12 13 14 15" 
close(tt) ## clean up 

需要注意的是,唯一的事情,如果你不這樣做關閉連接,results將有鎖定綁定(見?textConnection),這將意味着你不能給它分配一個新的值。

輸出字符向量已鎖定綁定(請參閱'lockBinding'),直到在連接上調用「close」。

或者,你不必多條語句包裝成一個功能,讓他們進入capture.output() - 你可以使用大括號{}使多條語句到一個單一的評價輸出...

results <- capture.output(split=TRUE,{ 
    print("hello") 
    print("goodbye") 
}) 
相關問題