2012-08-07 6 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() 명령으로 억제 할 수있는 것 같습니다. 실제로 콘솔에서 내 스크립트 source 내 스크립트가 표시되지 않는이 출력을 억제하는 Rscript에 인수가 있어야하는 것처럼 보입니다 ... 모든 입력이 필요합니까?

+5

아마도'? suppressPackageStartupMessages'가 도움이 될까요? – Chase

+3

이 질문에서 스크립트에 대해 묻는 질문이 패키지의 측면에서 말하면서 중복되는 것으로 표시된다는 것을 중복으로 끝내는 것에 관해서 언급하고 싶습니다. 따라서 Joris의 '자동'네임 스페이스 메소드는 사용되지 않으며, suppressMessages()는 OP가 사용될 때 완전 억제를 수행하지 않습니다. 따라서 어느 누구도 '정확한 복제물'은이 사용자를 돕지 않습니다. – Thell

+0

고마워, @ 쉘. 나는이 질문을 할 때 이미 확인 된 게시물을 읽었으므로 당신이 기쁩니다. –

답변

6

앤드류, 나는 똑같은 것을 만났고 suppressMessages()은 여분의 출력을 모두 제거하지 않았지만 capture.output() 형태를 사용하여 suppressMessages()을 감쌌습니다. 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()이 이미 설정되어 있습니다.

는 아마도 좀 더 제어가 도움이 :: 될 것 얻기 위해 자세한 인수를 설정 산출 :: 물건의

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


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

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

많은 당신이 함께 놀러 만에 수

$ 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") 

최소한 msg 출력을 완전히 억제하는 방법을 알 수 있습니다.

희망이 있습니다. 재미있어!

+0

이것이 해결책이 될 것 같습니다. 필자는 주 스크립트가 네 개의 다른 소스를 시작한다는 것을 추가해야하고,'library()'문장은 모두이 보조 스크립트에 포함되어야한다고 덧붙여 야합니다. 그럼에도 불구하고,'source()'호출을'capture.output (suppressMessages())'로 포장하는 것은 거의 작동합니다 ... 이제'source() 각각에 대해서'character (0) '원하는 출력 전에 호출합니다. 어떤 생각인지 그게 뭔데? 어느쪽으로 든 고마워! –

+0

거기에 : 단지'suppressMessages()'를'capture.output()'없이 사용하면 전체적인 문제를 해결할 수 있습니다. 다시 한 번 감사드립니다! –

+1

'문자 (0)'를받은 이유는 캡쳐 된 출력을 인쇄 된 것으로 지정하지 않았기 때문이며 특정 경우에는 전체 메시지가 이미 표시되지 않았기 때문입니다.'suppressMessages()'만으로는 항상 빈 문자 배열이 남지는 않을 것이라는 점에 유의하십시오. 위의 두 번째 예제 명령과 마찬가지로, Rmpfr은'suppressMessages()'를 사용한 후에도 초기화 메시지를 내 보낸다. – Thell