Пакет 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()
, поэтому вы всегда можете вручную добавить это к затронутым графикам, чтобы вернуться к предыдущему поведению, если вы не можете изолировать пакет, влияющий на ваш код.