Подтвердить что ты не робот

R подавляет запуск сообщений от зависимости

Одна из моих зависимостей пакета R отображает загружаемые сообщения при загрузке. Я хотел бы подавить эти сообщения о запуске.

Единственное исправление, которое я нашел до сих пор, - это удаление повреждающего пакета из строки Depends: в моем файле DESCRIPTION. Затем вызов suppressPackageStartupMessages(require("offendingPackage")) в .onLoad моего пакета.

Я предпочел бы держать оскорбительный пакет частью моего Depends, но кажется, что все, что указано в зависимости, автоматически загружается и поэтому не может быть подавлено.

4b9b3361

Ответ 1

Если вы работаете с пространствами имен, вы можете указать пакет в Imports и загрузить необходимые функции с помощью import или importFrom. Таким образом, пакет не подключен, но необходимые функции могут быть загружены и использованы вашим пакетом. Без прикрепления сообщения о запуске не задаются, поэтому этот подход гарантирует, что вы не увидите сообщений о запуске пакетов, указанных в Импортировании.

Убедитесь, что вы проверили, что вы импортировали все, что имеет значение. Если импортируемый пакет зависит от других пакетов, я не уверен, что все, что вам нужно для использования этих функций, импортируется. Возможно, вам придется немного озадачить, чтобы получить все необходимое для загрузки. С положительной стороны использование Imports гарантирует, что любая проверка зависимостей будет выполнена правильно.

Другой вариант - не указывать пакет в Depends, а в Suggests в файле DESCRIPTION и использовать параметр @Dirk. Это даст правильную проверку зависимостей, если в install.packages() установлено значение "dependencies = TRUE". Но лично я думаю, что использование пространств имен намного более чистое.

Ответ 2

Функция suppressPackageStartupMessages() работает тогда и только тогда, когда начальные сообщения на самом деле написаны с помощью packageStartupMessage() - см. страницу справки.

Во многих пакетах используется только cat(), который можно рассматривать как buglet. В этом случае

 suppressMessages(library(foo))

работает лучше.