Используя Rscript, есть ли достойный способ подавить вывод без сценария?
Возможный дубликат:
R подавляет запуска сообщения из зависимости
Я читал об использовании sink("NUL")
/ sink("/dev/null")
, но ни один из них не устранил проблему, с которой я столкнулся. Даже если я заверну library()
команды в sink("NUL")
а также sink()
мой вызов 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
мой скрипт в консоли)... любой ввод?
1 ответ
Андрей, я столкнулся с тем же suppressMessages()
не удаляет все лишние выходные данные, но использует sink()
в виде capture.output()
обернутый вокруг suppressMessages()
работает.
$ 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) ) )'
То, что происходит при загрузке пакета Rmpfr, - это несколько хороших стартовых сообщений, написанных с использованием message
соединение вместе с не очень хорошим сообщением, используя output
подключение. Конечно, вы можете создавать и манипулировать sink()
по своему усмотрению, но это то, что capture.output()
уже настроен, чтобы сделать.
Возможно, было бы полезно установить подробный аргумент arg, чтобы получить немного больше контроля:
$ 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"
С этим можно поиграть, но, по крайней мере, вы можете увидеть, как полностью подавить вывод сообщения.
Надеюсь, поможет. Повеселись!