Seurat Weekly NO.13 || 依賴關係與維護

天子呼來不上船,
自稱臣是菜鳥團。

在這裏,和國際同行一起學習單細胞數據分析。

最近在R4上安裝Seurat V4 的時候,有可能會遇到這樣的報錯:

Error: package or namespace load failed for ‘Seurat’: object ‘markvario’ is not exported by 'namespace:spatstat' 

遇到報錯第一步肯定是先去瀏覽器查詢啦。方法是:複製Error:後面的信息,黏貼到瀏覽器(必應或者Google),按搜索按鈕就可以了。相信我,你並不孤獨。果然有很多人遇到這個問題了,而且已經給出瞭解決方案,並在Seurat問答池中形成討論:

https://github.com/satijalab/seurat/issues/4226
https://github.com/satijalab/seurat/issues/4243
https://github.com/satijalab/seurat/issues/4222

主要原因是:Seurat依賴的R包spatstat升級了,這是一個分析空間數據的R包,在Seurat中是分析空間轉錄組數據的支持包,對應的主要函數是Seurat::RunMarkVario()

可以看到,是2021年3月13號更新的重大升級,爲什麼說是重大升級呢?從1.64升級到2.01,一般的小修小補是不會動個位數的,如可升級到1.67。而在這次升級中,把原來的函數spatstat::markvario 變成了 spatstat.core::markvario所以從新安裝的時候會有上面的報錯。就是Seurat所依賴的函數變了,無法再調用到。這個時候我們可以怎麼辦呢?

  • 安裝舊版本的spatstat。你不是更新了嗎?我用舊的。
remove.packages(grep("spatstat", installed.packages(), value = T))
.rs.restartR()
devtools::install_version("spatstat", version = "1.64-1")
  • 改Seurat函數。你不是依賴的函數名變了嗎?我直接改你的源碼,讓Seurat符合新的依賴環境。

這個工作已經由Seurat的開發者完成了,當然可能提交到CRAN還需要一點時間,但是根據Github上面的信息,應該已經同步好了。

  • 修改Seurat的命名空間。不推薦,這種方法是不在命名空間文件中出現spatstat,因爲目前我還沒有空間數據,我不用它爲什麼要加載它呢?當然,這要求懂一些R包構建的基本知識,不然,不知道修改哪裏呀。

R包就是一系列文件及其編譯文件,R包一共有5種states:

    source
    bundled
    binary
    installed
    in-memory

install.packages()devtools::install_github()都是從source, bundled, binary這些states轉成 installed states,而library()則是使installed package變成in-memory。

library一如字面意思所言:圖書館。install的過程是我們買書(R包),爲什麼會有不同的安裝方式呢?因爲不同的書放在不同的商城,所以我們要從不同的地方來採購。install.packages()是從CRAN標準庫安裝,devtools::install_github()是從菜市場安裝。買來之後,library()就是拿出來讀了,想讀哪本書,就拿哪一本。所以,在安裝R包之前要知道這個包在那個倉庫放着的,百度R包名字即可。

R包的基本形態有以下幾種:

這些都對應一個文件,可以在.libPath()輸出的路徑下查看。

那麼,如何快速查看一個R包的依賴環境呢?

library(Seurat)
packageVersion('Seurat')
[1] ‘4.0.0’

我們使用pacman這個R包開查看。

# install.packages('pacman')
library(pacman)
p_info(Seurat)

Package: Seurat
Version: 4.0.0
Date: 2021-01-27
Title: Tools for Single Cell Genomics
Description: A toolkit for quality control, analysis, and exploration of single cell RNA sequencing
           data. 'Seurat' aims to enable users to identify and interpret sources of heterogeneity
           from single cell transcriptomic measurements, and to integrate diverse types of single
           cell data. See Satija R, Farrell J, Gennert D, et al (2015) <doi:10.1038/nbt.3192>,
           Macosko E, Basu A, Satija R, et al (2015) <doi:10.1016/j.cell.2015.05.002>, Stuart T,
           Butler A, et al (2019) <doi:10.1016/j.cell.2019.05.031>, and Hao, Hao, et al (2020)
           <doi:10.1101/2020.10.12.335331> for more details.

查看依賴關係:

 p_depends(Seurat)
$Depends
[1] "methods"

$Imports
 [1] "cluster"       "cowplot"       "fitdistrplus"  "future"        "future.apply"  "ggplot2"       "ggrepel"       "ggridges"      "graphics"      "grDevices"     "grid"         
[12] "httr"          "ica"           "igraph"        "irlba"         "jsonlite"      "KernSmooth"    "leiden"        "lmtest"        "MASS"          "Matrix"        "matrixStats"  
[23] "miniUI"        "patchwork"     "pbapply"       "plotly"        "png"           "RANN"          "RColorBrewer"  "Rcpp"          "RcppAnnoy"     "reticulate"    "rlang"        
[34] "ROCR"          "Rtsne"         "scales"        "scattermore"   "sctransform"   "SeuratObject"  "shiny"         "spatstat.core" "spatstat.geom" "stats"         "tibble"       
[45] "tools"         "utils"         "uwot"         

$LinkingTo
[1] "Rcpp"         "RcppEigen"    "RcppProgress"

$Suggests
 [1] "ape"                  "rsvd"                 "testthat"             "hdf5r"                "S4Vectors"            "SummarizedExperiment" "SingleCellExperiment"
 [8] "MAST"                 "DESeq2"               "BiocGenerics"         "GenomicRanges"        "GenomeInfoDb"         "IRanges"              "rtracklayer"         
[15] "Rfast2"               "monocle"              "Biobase"              "VGAM"                 "limma"                "metap"                "enrichR"             
[22] "mixtools"            

查看反向依賴關係:

p_depends_reverse(Seurat)
$Imports
[1] "CDSeq"    "DUBStepR" "scMappR"  "Signac"   "SignacX"  "SoupX"   

$Suggests
 [1] "BisqueRNA"          "clustree"           "conos"              "DIscBIO"            "dyngen"             "nanny"              "rliger"             "Rmagic"            
 [9] "singleCellHaystack" "treefit"            "VAM"  

寫一個R包,對我們普通用戶來說只是安裝加載使用,而對開發者而言,決定開源以後,就像第一次送孩子進學校:他和老師和同學處的好嗎?他餓了不會在課堂上就大哭起來吧?能不能聽老師的教育呀?


https://github.com/satijalab/seurat/issues/422`

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章