我正在Rstudio中编写一个R脚本,查看单个单元格数据并生成各种图形。我使用的包是ggplot2。当未加载Seurat库时,它会生成这样的漂亮图形输出:Pure ggplot2 graph
然后,当导入Seurat库时,图形将恢复为丑陋:Seurat Interfered Plot 以下是Seurat带入的进口清单:
进口:方法,ROCR,stringr,mixtools,lars,fastICA,tsne,Rtsne, fpc,ape,VGAM,pbapply,igraph,FNN,插入符号,plyr,dplyr, RColorBrewer,MASS,Matrix,irlba,reshape2,gridExtra,gplots, gdata,Rcpp,RcppEigen,RcppProgress,tclust,ranger
关于如何在不输出图形输出的情况下同时存在两个库的任何想法?
解决方案: - 尝试"分离("包:Seurat",卸载= TRUE)" //在关闭并重新加载RStudio时没有恢复绘图并且不允许上游代码块提供ggplot2正常图形。
感谢。
答案 0 :(得分:1)
有一条评论要求我发布修复程序作为答案,所以我做了一些挖掘工作。调用library(package)
后发生意外行为,这是因为该程序包具有一个名为.onLoad
或.onAttach
的函数。这些会在加载或附加软件包时自动运行,通常用于设置选项,打印有用的消息等。最佳实践表明,您应该使用补充功能.onUnload
撤消任何操作。参见:https://r-pkgs.org/r.html#when-you-do-need-side-effects
有时,包装确实需要副作用。这是最常见的 您的包裹与外部系统对话-您可能需要做一些 程序包加载时的初始设置。 ...如果您使用.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时发生):
clauswilke于2018年3月29日承诺
因此,大约一年前,这个问题不再可重复。但是,当发生意外行为时,这种搜寻过程可能仍对将来的读者有用。
ggplot2
特定的修复:原始默认主题为theme_gray()
,因此,如果您无法隔离影响您的软件包,则始终可以将其手动添加到受影响的图中以恢复以前的行为。代码。