Пакет R, Seurat, мешающий работе ggplot2/plotly

Я пишу R-скрипт в Rstudio, просматривая данные по одной ячейке и генерируя различные графики. Я использую пакет ggplot2. Он генерирует хорошие графические выходные данные, когда библиотека Seurat не загружена: Pure ggplot2 graph

Затем, когда библиотека Seurat импортируется, график возвращается к этому уродству: Seurat Interfered Plot Вот список импортирований, которые Seurat приносит при включении:

Импорт: методы, ROCR, stringr, mixtools, lars, fastICA, tsne, Rtsne, fpc, ape, VGAM, pbapply, igraph, FNN, caret, plyr, dplyr, RColorBrewer, MASS, Matrix, irlba, reshape2, gridExtra, gpp gdata, Rcpp, RcppEigen, RcppProgress, tclust, ranger

Любые мысли о том, как представить обе библиотеки без изменений в выводе графика?

Пробные решения: - попытался "detach("package:Seurat", unload = TRUE)" // не восстановил графики при закрытии и перезагрузке RStudio И не позволил восходящим фрагментам кода обеспечить нормальное отображение ggplot2.

Благодарю.

0 ответов

В одном из комментариев меня попросили опубликовать исправление в качестве ответа, поэтому я немного покопался. Когда неожиданное поведение происходит после вашего звонкаlibrary(package), потому что в этом пакете есть функция с именем .onLoad или .onAttach. Они автоматически запускаются при загрузке или прикреплении пакета и обычно используются для установки параметров, печати полезных сообщений и т. Д. В лучших практиках говорится, что вам следует отменить любые действия с помощью дополнительной функции,.onUnload. См. https://r-pkgs.org/r.html

Иногда пакетам нужны побочные эффекты. Это наиболее распространено, если ваш пакет общается с внешней системой - вам может потребоваться выполнить некоторую первоначальную настройку при загрузке пакета.... Если вы используете.onLoad(), подумайте об использовании.onUnload() для устранения любых побочных эффектов. По соглашению.onLoad() и друзья обычно сохраняются в файле с именем zzz.R.

Итак, я пошел искать в репозитории Github пакет Seurat, и не видел ни одного ggplot2-связанные с параметрами (https://github.com/satijalab/seurat/blob/master/R/zzz.R). Следующим шагом было проверить этот пакетDESCRIPTION, который показывает мне загруженные пакеты, Seuratиспользует. Это длинный список, но я узнал там довольно распространенный пакет пользовательской графики,cowplot. Если вы затем перейдете в это репо (https://github.com/wilkelab/cowplot/blob/master/R/setup.R):

.onAttach <- function(libname, pkgname) {
  # switch the default theme to theme_cowplot
  # ggplot2::theme_set(theme_cowplot())
  packageStartupMessage("\n********************************************************")
  packageStartupMessage("Note: As of version 1.0.0, cowplot does not change the")
  packageStartupMessage("  default ggplot2 theme anymore. To recover the previous")
  packageStartupMessage("  behavior, execute:\n  theme_set(theme_cowplot())")
  packageStartupMessage("********************************************************\n")
}

Из этих сообщений видно, что раньше загрузкаcowplot изменил тему по умолчанию для ggplot2. Из любопытства я посмотрел на коммиты, чтобы узнать, когда это изменение произошло в источнике (но не тогда, когда оно было отправлено в CRAN):

https://github.com/wilkelab/cowplot/commit/158ccdfa45d6c3e99c8568afaa73f7d68cd6c9c2

Клаусвильке совершено 29 марта 2018 г.

Итак, примерно год назад этот вопрос больше не воспроизводится. Однако этот процесс поиска может быть полезен будущим читателям при возникновении неожиданного поведения.


TL;DR:

ggplot2-специальное исправление: исходная тема по умолчанию theme_gray(), поэтому вы всегда можете вручную добавить это к затронутым графикам, чтобы вернуться к предыдущему поведению, если вы не можете изолировать пакет, влияющий на ваш код.

Другие вопросы по тегам