Вимкніть повідомлення при завантаженні пакета


97

У мене є пакет на 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
@Jack, ні, дивіться мою відповідь нижче для правильного виправлення.
Dirk Eddelbuettel

6
Тут обов’язковий коментар "це пакет, а не бібліотека"
Spacedman

Відповіді:


147

Просто використовуйте 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> 

19
Ви не повинні використовувати suppressPackageStartupMessages?
hadley

9
Немає чистого прибутку, крім витрати на X більше символів. Плюс suppressPackageStartupMessagesпригнічує лише стартові повідомлення, де, як я віддаю перевагу, suppressMessages()придушує будь-які та всі повідомлення (але не так, cat()як я пам’ятаю). Але не слід використовувати це в тексті запуску.
Dirk Eddelbuettel

1
Також чудово, що пропозиція Дірка пригнічує повідомлення з залежних пакунків, а також коли вони завантажуються.
Метт Баннерт,

2
Чи є спосіб захопити ці повідомлення про запуск? Я можу фіксувати попередження та помилки, але не знаю, як фіксувати інші такі повідомлення.
Адріан

1
@Adrian так, є, оберніть у tryCatch та надайте обробник повідомлень
jangorecki

20

Відповідь Дірка пригнічує всі повідомлення і не є специфічною для повідомлень, що генеруються під час завантаження пакунків.

Більш точне рішення поставленого питання:

suppressPackageStartupMessages(library(THE_PACKAGE_NAME))

Трохи більш детальне пояснення можна знайти тут


10

Використовуйте suppressPackageStartupMessages, див. Відповідь @MehradMahmoudian. Для повноти, додавши приклади використання:

Для однієї бібліотеки використовуйте suppressPackageStartupMessages(...), наприклад:

suppressPackageStartupMessages(library(ggplot2))

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

suppressPackageStartupMessages({
    library(ggplot2)
    library(ggdendro)
})


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)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.