Геометрия geom_density_ridges из пакета ggridges создала ridgelines, и если полоса пропускания не указана, она пытается найти разумное значение. Затем он использует функцию base R message, чтобы сообщить об этом значении (см. https://twitter.com/ClausWilke/status/921363157553172480).
Функция base R функция suppressMessages предназначена для подавления таких сообщений. Например, этот код выводит сообщение:
message('This is a message');
И этот код ничего не выводит:
suppressMessages(message('This is a message'));
Однако по какой-то причине подавление сообщений кажется, гм, подавлено, когда эта геометрия добавляется в ggplot. Следующий код все еще вызывает сообщение:
require('ggplot2');
require('ggridges');
suppressMessages(ggplot(Orange, aes(x=age,y=Tree)) + geom_density_ridges());
(В частности, "Picking joint bandwidth of 319".)
Почему это? Предоставляет ли ggplot что-то, чтобы обеспечить доступ к сообщениям независимо от спецификации пользователей? Или это действительно разумное поведение, о котором я просто не знаю?
При создании отчетов RMarkdown опция chunk message может быть установлена на message=FALSE, которая подавляет все сообщения на уровне рендеринга. И так как это мой прецедент, моя проблема решена.
И как предложил предложенный вами пакет ggridges Клауса Уилке, вы всегда можете вручную установить bandwidth, чтобы избежать сообщения (https://twitter.com/ClausWilke/status/921361195231215616).
Но почему suppressMessages не подавляет сообщение в первую очередь?
Является ли это ожидаемое поведение, о котором я просто не знаю?