Геометрия 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
не подавляет сообщение в первую очередь?
Является ли это ожидаемое поведение, о котором я просто не знаю?