2011-05-30 115 views
5

我玩一個位與LowRankQP()包中的R,甚至設置verbose=FALSE仍然產生大量的輸出(見下例)。如何沉默R包的輸出?

輸出來自編譯部分的代碼。有沒有一種方法(一個包裝功能部件?)中的R撥打電話到LowRankQP()絕對沉默(即不打印屏幕上的任何東西),而無需修改底層的編譯代碼(既不與此包關聯的電子郵件地址是仍然活躍)?

library(LowRankQP) 

Vmat <- matrix(0,6,6) 
diag(Vmat) <- c(1, 1,1,0,0,0) 
dvec <- c(0,-5,0,0,0,0) 
Amat <- matrix(c(-4,-3,0,-1,0,0,2,1,0,0,-1,0,0,-2,1,0,0,-1),6,3) 
bvec <- c(-8,2,0) 
uvec <- c(100,100,100,100,100,100) 

aa<-LowRankQP(Vmat,dvec,t(Amat),bvec,uvec,method="CHOL") 

# LowRankQP CONVERGED IN 15 ITERATIONS 
# 
#  Primal Feasibility = 2.5719308e-16 
#  Dual Feasibility  = 7.1949984e-16 
#  Complementarity Value = 3.3066705e-11 
#  Duality Gap   = 3.3065273e-11 
#  Termination Condition = 9.7802929e-12 

這是一個以 「LowRankQP會聚到15次迭代」,我想逃脫..

的Ubuntu 11.04,R版本2.12.1和LowRankQP()1.0.1開始部分。

+1

請添加一個可重複的例子。我從我做過的幾個測試中沒有遇到任何問題。 – 2011-05-30 14:49:52

+2

在Windows上不可重現,我無法獲得任何輸出。請1)更新到最新版本,2)如果這種情況持續存在,請通知軟件包的開發者。這聽起來像Linux和Windows版本之間的一些錯誤/不一致。 – 2011-05-30 16:10:58

+0

謝謝J.M.(我已經運行R /包的最新版本,所以我會郵寄devel)。 – user189035 2011-05-30 17:59:25

回答

5

接收器(文件= NULL)不起作用,因爲它關閉最後的接收器,僅此而已。

片(文件= NULL)警告消息:在水槽(文件= NULL):沒有下陷刪除

什麼工作,雖然是:

f = file() 
sink(file=f) ## silence upcoming output using anonymous file connection 
... your code here ... 
sink() ## undo silencing 
close(f) 

使用匿名文件具有與平臺無關的優點,即您不必創建臨時文件名。

實施例:

f = file() 
sink(file=f) 
example(glm) 
sink() 
close(f) 

我用水槽()成功用於其它功能(例如normalmixEM2comp {mixtools})。

(編輯: - 如果你撥打上面的代碼往往不夠,甚至是錯誤這篇文章的第一個版本沒有使用明確的文件句柄,從而給了一個警告)。這現在通過使用close(f)來解決。

0

我不它是否會工作,但你可以嘗試invisible()。我不知道你正在使用的功能,我不知道如果看不見,可以沉默cat()。但你可以放棄。

+0

恩:感謝提示,但它不起作用 – user189035 2011-05-30 15:06:22

+3

所有看不見的確是,是防止其被打印內容的返回值,所以這應該不會有幫助。 – 2011-05-31 06:51:43

2

你熟悉R函數sink()?從其幫助頁面:

sink     package:base     R Documentation 

Send R Output to a File 

Description: 

    ‘sink’ diverts R output to a connection. 

    ‘sink.number()’ reports how many diversions are in use. 

    ‘sink.number(type = "message")’ reports the number of the 
    connection currently being used for error messages. 

Usage: 

    sink(file = NULL, append = FALSE, type = c("output", "message"), 
      split = FALSE) 

    sink.number(type = c("output", "message")) 

Arguments: 

    file: a writable connection or a character string naming the file 
      to write to, or ‘NULL’ to stop sink-ing. 

file=NULL參數是你可能想要在這裏。

+0

謝謝D.E.你知道有什麼方法可以避免這些打印輸出出現在終端窗口 - 這很煩人嗎? – user189035 2011-05-30 16:41:19

+0

'sink(file = NULL)'這樣做:** all **輸出變爲NULL。 – 2011-05-30 18:07:20

+0

謝謝D.E .:然後我一直無法使用它:在上面的代碼中,我應該沉到哪裏(file = NULL),以便消息不會在屏幕上打印? – user189035 2011-05-30 19:20:13

1

好的,我可以通過註釋線413-423> 418 LowRankQP.c的和重新安裝,從名爲.tar.gz(或可替代地添加新選項詳細== 2)做。