Отключить сообщения при загрузке пакета

103

У меня есть пакет в R (ROCR), который мне нужно загрузить в среду R. После загрузки пакета печатается набор сообщений. Обычно это нормально, но поскольку результат моего сценария R используется для дальнейшего анализа, я хочу полностью отключить весь этот вывод. Как я могу это сделать? Более того, я бы предпочел сделать это вообще без изменения ROCR, чтобы будущим пользователям этого скрипта тоже не пришлось этого делать.

Уже:

  • sink()здесь не работает - перенаправление stdout и std err /dev/nullна меня ничего не делает.
  • Неудивительно, что он options(warnings=-1)тоже ничего не делает, поскольку сами по себе это не предупреждения.

есть идеи?

ученик
источник
Какие сообщения печатаются?
1
Хотя весь вывод не нужен, первые несколько строк следующие: Loading required package: gplots Loading required package: gtools Loading required package: gdata- Обратите внимание, что это не позволяет мне правильно отформатировать сообщение.
ученик
Затем загрузите gplots, gtoolsи gdataперед загрузкой ROCR.
2
@ Джек, нет, см. Мой ответ ниже для правильного исправления.
Дирк Эддельбюттель
6
Обязательный комментарий «это пакет, а не библиотека»
Spacedman

Ответы:

152

Просто используйте suppressMessages()во время library()звонка:

edd@max:~$ R

R version 2.14.1 (2011-12-22)
Copyright (C) 2011 The R Foundation for Statistical Computing
ISBN 3-900051-07-0
Platform: x86_64-pc-linux-gnu (64-bit)
[...]

R> suppressMessages(library(ROCR))
R>                                               # silently loaded
R> search() 
 [1] ".GlobalEnv"         "package:ROCR"         # it's really there      
 [3] "package:gplots"     "package:KernSmooth"
 [5] "package:grid"       "package:caTools"   
 [7] "package:bitops"     "package:gdata"     
 [9] "package:gtools"     "package:stats"     
[11] "package:graphics"   "package:grDevices" 
[13] "package:utils"      "package:datasets"  
[15] "package:methods"    "Autoloads"         
[17] "package:base"      
R> 
Дирк Эддельбюттель
источник
20
Разве вы не должны использовать suppressPackageStartupMessages?
Хэдли
10
Нет чистой прибыли, если не тратить на X персонажей больше. Плюс suppressPackageStartupMessagesподавляет только сообщения запуска, где, как я предпочитаю, suppressMessages()подавляет все сообщения (но не, cat()насколько я помню). Но нельзя использовать это в стартовом тексте.
Дирк Эддельбюттель
1
Также замечательно, что предложение Дирка подавляет сообщения от зависимых пакетов, когда они загружаются.
Мэтт Баннерт
2
Есть ли способ записать эти сообщения запуска? Я могу записывать предупреждения и ошибки, но не знаю, как записывать другие подобные сообщения.
Адриан
1
@Adrian: да, есть, заверните в tryCatch и предоставьте обработчик сообщений
jangorecki
23

Ответ Дирка подавляет все сообщения и не относится к сообщениям, которые генерируются при загрузке пакетов.

Более точное решение заданного вопроса:

suppressPackageStartupMessages(library(THE_PACKAGE_NAME))

Более подробное объяснение можно найти здесь

Мехрад Махмудян
источник
14

Используйте suppressPackageStartupMessages, см. Ответ @MehradMahmoudian. Для полноты картины добавим примеры использования:

Для одной библиотеки используйте suppressPackageStartupMessages(...), например:

suppressPackageStartupMessages(library(ggplot2))

Для нескольких библиотек используйте suppressPackageStartupMessages({...}), например:

suppressPackageStartupMessages({
    library(ggplot2)
    library(ggdendro)
})
Тимур Штатланд
источник
1

library(ROCR, quietly = TRUE) может быть более элегантным вариантом.

Андрей Мартинс
источник
4
не совсем, попробуйlibrary(data.table, quietly = TRUE)
Gaurav Singhal
1

Добавление, quietly = Tкак показано ниже, решит проблему:

suppressWarnings(suppressMessages(library("dplyr", quietly = T)))

В случае нескольких пакетов вы можете использовать:

## specify the package names
PKGs <- c("affy","gcrma","readxl","ggplot2","lattice" )

и они используют lapply, как показано ниже:

lapply(PKGs, library, character.only = TRUE ,quietly = T)
Юсеф
источник