2012-08-07 2 views
9

可能性の重複:
R suppress startupMessages from dependencyRscriptを使用すると、非スクリプト出力を抑制する方法がありますか?

私はsink("NUL")/sink("/dev/null")の使用について読んだが、それらのどちらも私がいる問題を修正しました。私はsink("NUL")sink()library()コマンドをラップしている場合でも、Rscriptに私の呼び出しは、私が見たくない情報のすべての方法を出力します

Loading required package: Matrix 
Loading required package: methods 
Loading required package: lattice 
Loaded glmnet 1.8 

Loading required package: MASS 
Loading required package: lme4 

Attaching package: 'lme4' 

The following object(s) are masked from 'package:stats': 

    AIC, BIC 

Loading required package: R2WinBUGS 
Loading required package: coda 

Attaching package: 'coda' 

The following object(s) are masked from 'package:lme4': 

    HPDinterval 

Loading required package: abind 
Loading required package: foreign 

arm (Version 1.5-05, built: 2012-6-6) 

Working directory is C:/Users/andrews/bootstraps/user/_branches/ER-PoC/Bootstraps/R 


Attaching package: 'arm' 

The following object(s) are masked from 'package:coda': 

    traceplot 

[1] "client=51"   "date='01-01-2011'" 
[1] "01-01-2011" 
[1] 51 

最後のものは、私が実際にしたいだけ出力され、また、私はsink()コマンドで抑制することができた唯一の出力です。実際にはRscriptの引数があって、この出力を抑制する必要があるように思えます(これはコンソールの中に私のsourceスクリプトがあると表示されません)。

+5

おそらく '?suppressPackageStartupMessages'は役に立ちますか? – Chase

+3

この質問はスクリプトに関する質問であり、パッケージに関して言えば、質問の重複としてマークされていることを複製としてクローズすることについて言及したいと思います。したがって、Jorisの 'サイレント'名前空間メソッドは使用されません。また、suppressMessages()は、OPとして使用されたときに完全な抑制を行いません。したがって、どちらの方法でも、このユーザーには「正確な重複」は役に立ちません。 – Thell

+0

ありがとう、@シェル。私はこの質問をしたときにすでに特定の投稿を読んでいたので、あなたが同意してうれしいです。 –

答えて

6

アンドリューは、私は同じことに走ったとsuppressMessages()は、すべての余分な出力を削除しますが、suppressMessages()作品に巻き付けcapture.output()の形でsink()を使用していませんでした。 Rmpfrパッケージをロードするときに何が起こっているか

$ rscript --vanilla -e 'library(Rmpfr)' 
Loading required package: methods 
Loading required package: gmp 
---->8---- 
Loading C code of R package 'Rmpfr': GMP using 32 bits per limb 
---->8---- 


$ rscript --vanilla -e 'suppressMessages(library(Rmpfr))' 
Loading C code of R package 'Rmpfr': GMP using 32 bits per limb 


$ rscript --vanilla -e 'msg.out <- capture.output(suppressMessages(library(Rmpfr)))' 

output接続を使用してとても素敵ではないメッセージと一緒にmessage接続を使用して書かれたいくつかの行儀の起動メッセージです。確かに、自分でsink()を作成して操作することができますが、それはcapture.output()が既にセットアップされていることです。

おそらく、もう少しコントロールを取得するために、詳細な引数を設定することが参考になる::

$ cat sample.R 
#!/c/opt/R/R-2.15.0/bin/rscript --vanilla 

cmd_args <- commandArgs(TRUE); 

if(length(cmd_args) > 0) { 
    eval(parse(text = cmd_args[1])) 
} 

if(exists("verbose")) { 
    library(Rmpfr) 
} else { 
    msg.trap <- capture.output(suppressMessages(library(Rmpfr))) 
} 

print("Hello") 

得::あなたがそこで遊んで可能性のものの

$ ./sample.R 
[1] "Hello" 


$ ./sample.R "verbose=TRUE" 
Loading required package: methods 
Loading required package: gmp 

Attaching package: 'gmp' 
---->8---- 
[1] "Hello" 

多くを、しかしで少なくともmsg出力を完全に抑制する方法を見ることができます。

希望します。楽しむ!

+0

これは解決策になるようです。私の主なスクリプトは、4つのソースから始まり、 'library()'ステートメントはすべてこれらの付属スクリプトに含まれていると付け加えておきます。それでも、 'source()'呼び出しを 'capture.output(suppressMessages())'にラップすることはほとんど機能しています...今、 'source() 'は目的の出力の前に呼び出します。それはどういう考えですか?いずれにしてもありがとう! –

+0

そこには、 'suppressMessages()'を 'capture.output()'なしで使用するだけで、問題全体が解決されます。再度、感謝します! –

+1

あなたが '文字(0)'を受け取った理由は、キャプチャされた出力を印刷されたものに割り当てておらず、特定のケースではメッセージ全体が既に抑制されていたからです。'suppressMessages()'だけでは空の文字配列が残るわけではないことに注意してください。 'suppressMessages()'を使った後でさえ、Rmpfrが初期化メッセージを吐き出す、上記の2番目のコマンドと同様です。 – Thell

関連する問題