R包,Seurat,干扰ggplot2 / plotly输出

时间:2017-07-25 19:11:16

标签: r ggplot2 package

我正在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正常图形。

感谢。

1 个答案:

答案 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时发生):

https://github.com/wilkelab/cowplot/commit/158ccdfa45d6c3e99c8568afaa73f7d68cd6c9c2#diff-c9a33000e506e95bca8089aa91efd8b2

  

clauswilke于2018年3月29日承诺

因此,大约一年前,这个问题不再可重复。但是,当发生意外行为时,这种搜寻过程可能仍对将来的读者有用。


TL; DR:

ggplot2特定的修复:原始默认主题为theme_gray(),因此,如果您无法隔离影响您的软件包,则始终可以将其手动添加到受影响的图中以恢复以前的行为。代码。