2026/07/05(日);初稿
はじめに
先日、これまで使用してきた解析環境であるUbuntu 22.04 LTSのシステムを間抜けなコードを一発走らせるだけでぶっ壊すという事態を引き起こしてしまった。そして今回、LinuxのKernel 7.0に期待してUbuntu 26.04 LTSをインストールして、一応、使えるようにはしたところである。
今回はUbuntu 26.04LTSに、これまでRNAシークエンス、TCGA、 CPTAC、そして、シングルセルRNAシークエンス用の解析環境をRでインストールしていく。
ここでは遺伝子・タンパク質発現とシングルセルRNAシークエンス解析用のRパッケージをrenvに入れていくが、そのインストールに使ったマークダウンはSTORESで販売する。記事を読むのが面倒な人、インターネットでリポジトリを調べるのが面倒な人は、これを利用したら良いと思う。
renvを使う
今回重要なことは、renvを使ってみることである。renvは、言うて見ればconda envのようなものである。インストールしたパッケージをR本体から切り離して、管理することができる。よって、使っていく上で何か問題が起こりそうな環境やパッケージがあれば、この切り離した解析環境にインストールすることで、問題を最小限に止め、かつ、必要によってはGitなんかで共有しやすくすることが出来る。今回、ubuntu 22.04LTSのシステムをぶっ壊すことになったきっかけは、scanpyで作成したh5adを、Rで楽に読み込もうとしてanndataやAnndataRを入れようとしたときに、同時にRでanndata(AnndataRではなく)を動かすために必要なReticulateというパッケージを不意に入れてしまったことにより、解析環境がおかしくなってしまったことが原因である。renvを使うことで、こういうことがあった場合に、問題があるパッケージを全部消してしまえ、メインのシステムには大きな影響を与えないことが利点である。
このrenvだが、renv::snapshot()を使うことでそのrenvにインストールされているパッケージのバージョンの確認も比較的簡単に行えるし、パッケージのインストールに使用するrenv::install()は良く出来ていて、非常に使えるシステムと思う。従来のinstall.packages()、BiocManager::install()、install_github()が、けっこうシームレスに動くし、なんかパッケージのダウンロードとインストールが早い気がする。吐き出されるメッセージを眺めていてなんとなくわかるのが、おそらくCacheに保存されているパッケージをうまいこと使っているだろうとは思う。よくわらからんけど。conda envとかに比べて、ディレクトリの階層なんかもわかりやすい。
renvの作成方法
まずはインストールする。
install.packages("renv")RRStudioの「File」から「New Project…」を選ぶ。

「New Project」を選ぶ。

「Directory name:」のところに、文字通り、作成されるディレクトリの名前と、それを保存するディレクトリを指定する。「~R exression analysis」のところは事前に作成しておく必要がある。ディレクトリ名はスペースではなく、アンダーバーあたりにしておいた方が今後絶対トラブルがない。

プロジェクトを作成したら、早速以下のコードを流す。
renv::init()Rそうすると、作成したディレクトリに色々とディレクトリやrenv.lockファイルが作成される。

renv::init()を流すと、以下のようなディレクトリやファイルが形成される。ここにあるrenv.lockファイルに、この環境で使用するパッケージの詳細が記録されていく。.Rprofileはお馴染みの、起動時に読み込まれるスクリプトを書いたものである。renvディレクトリに、インストールしたパッケージを入れたライブラリが入っている。

renvの使い方
RStudioを起動したら「File」から「Open Project…」を選び、作成したRプロジェクトファイル、ここでは「expression analysis.Rproj」を選ぶ。そうすると、ディレクトリ内に入っている.Rprofileが読み込まれ、このrenvが起動するようになっている。起動したら、以下を流す。
renv::init()Rそうすると、以前の環境を復元するか、初期化するか、何もしないかという選択肢が出てくるので、以下の画像のように1を選ぶ。Selection:のところに1を入力すれば良い。そうすると、作成した環境が読み込まれる。
パッケージのインストール
パッケージのインストールは、基本的に一つだけである。インストール先がCRAN、BiocManager、Githubかに応じて、install()の括弧内の記述を変えれば良い。上述のように、ダウンロードとインストールが非常にスムーズに開始される。個人的には、最初にインストールするときにはlock = TRUEを入れておいた方が良いと思う。これにより、インストールしたらenv.lockファイルをアップデートしてくれる。解析環境が変わらないようにするような目的でrenvを利用する場合、アップデートやアップグレードなんかほとんどやらないだろうからlock = TRUEで良い。これをしないと、最後にrenv::snapshot()を流してenv.lockファイルをアップデートする必要があるようだ。
ここで、注意としては、インストール時にinstall.package()、BiocManager::install、install_github()を使ってしまうと、作成したrenvではなく、デフォルト(というか大本というか)のライブラリにインストールされてしまう。これだとrenvの意味が無いし、renvでlinrary()を流しても、エラーになってしまう。
renv::install()
renv::install("Seurat", lock = TRUE) # install.packages("Seurat") と同じ。
renv::install("cole-trapnell-lab/monocle3", lock = TRUE) #devtools::install_github('cole-trapnell-lab/monocle3') と同じ。
renv::install("bioc::anndataR", lock = TRUE) # BiocManager::install("anndataR")と同じ。R以降は、いつも通り、library()でパッケージを読み込んで、解析を始めれば良い。
管理者権限で実行する方法
パッケージをインストールしていると、ソースからインストールしなければならないものがいくつかある。その場合、makeのところで管理者権限が必要な場合がある。そんなときは、ターミナルからRを実行するのが良いと思う。
まず、作成したプロジェクトのディレクトリに以下のように行く。このときはR_scRNAseqという場所にRのプロジェクトscRNAseqを作成したので、そこにcdで移動する。次に、管理者権限でRを実行すれば良い。このディレクトリscRNAseqには、.Rprofileが入っているので、Rを起動するとrevが起動するようになっている。
cd /home/kats/R_scRNAseq/scRNAseq
sudo RBashRが起動したら、以下を流して、インストールを続ければ良い。
renv::init()
# Enter 1 after showing "Selection: "R
閉じ方
シンプルにq()で良い。
起こった問題
シングルセルRNAシークエンス関連のパッケージで、Seurat周りの色々なツールを使用出来るようにするラッパーのSeuratWrapperのインストールの再、velocyto.Rというパッケージを読み込むが、これがC++の互換性問題でインストールすることが出来なかった。vetocyto.RはC++11を使っているらしいので、C++11のサイトの通りに、velocyto.Rをgit cloneしたときにダウンロードされるDESCRIPTIONのLinkingToにC++をいれて、それを用いてソースからインストールしてみたが、C++の問題が解決できずにインストール出来なかった。またvelocyto.Rのsrcディレクトリに入っているMakevarsの中の記述のうちCXX11をCXX15とかに変えてみたけど、結局インストール出来なかった。しかし、これらのエラーは、このような仮想環境ではなく、R本体にremotes::install_github(“satijalab/seurat-wrappers”)してみると、ちゃんとインストール出来た。
こういう互換性問題が起こる可能性がある。

今回作成した仮想環境
以下に今回、仮想環境を作成するために使用したパッケージである。
必要だったシステム上のパッケージ
インストールに必要だったシステム上のパッケージが以下である。velocyto.Rをインストールするためにいろいろ試して、結局使用しなかったものもある。
## for devtools
sudo apt update
sudo apt install libuv1-dev libcurl4-openssl-dev libfontconfig1-dev libuv1-dev
sudo apt install libharfbuzz-dev libfribidi-dev
sudo apt install libxml2-dev
sudo apt install libfreetype6-dev libpng-dev libtiff5-dev libjpeg-dev libwebp-dev
# for edgeR
sudo apt install liblapack-dev libopenblas-dev # https://stackoverflow.com/questions/27033243/usr-bin-ld-cannot-find-llapack
sudo apt install libcairo2-dev # clusterprofiler
sudo apt install "^libtool" # RProtoBufLib
sudo apt install clang # RProtoBufLib
sudo apt install libmagick++-dev # GSVA
## scRNAseq
sudo apt install libhdf5-dev
sudo apt install libgsl-dev
sudo apt install libglpk-dev libgmp3-dev pandoc
sudo apt install libudunits2-dev # monocle3
sudo apt install libgdal-dev # sf, monocle3
sudo apt install libigraph-dev
sudo apt install r-cran-rcpp
sudo apt install cpp-11
sudo apt install gsfonts
sudo apt install gdal-bin
sudo apt install build-essential libgomp1Bash遺伝子・タンパク質発現解析用
途中、GithutのParsonal Access Token(PAT)が求められたので、Githubで作成している。ここは各個人で取得する必要がある。
# Basic packages
renv::install("devtools", lock = TRUE)
renv::install("BiocManager", lock = TRUE)
renv::install("remotes", lock = TRUE)
renv::install("renv", lock = TRUE)
renv::install("pak", lock = TRUE)
renv::install('fs', lock = TRUE)
renv::install('curl', lock = TRUE)
renv::install('systemfonts', lock = TRUE)
renv::install('sass', lock = TRUE)
renv::install(c("credentials", "httr2", "bslib", "systemfonts", "textshaping"), lock = TRUE)
renv::install(c('ragg', 'xml2'), lock = TRUE)
renv::install(c('pkgdown', 'roxygen2', 'urlchecker'), lock = TRUE)
renv::install("devtools", lock = TRUE)
renv::install("pak", lock = TRUE)
renv::install("Rcpp", lock = TRUE)
# Packages for analysis
renv::install("bioc::edgeR", lock = TRUE)
renv::install("bioc::baySeq", lock = TRUE)
renv::install("bioc::DESeq2", lock = TRUE)
renv::install("bioc::limma", lock = TRUE)
renv::install('gdtools', lock = TRUE)
renv::install("bioc::ggtree", lock = TRUE)
renv::install("bioc::clusterProfiler", lock = TRUE)
renv::install("alserglab/fgsea", force = TRUE)
renv::install("bioc::escape", lock = TRUE)
renv::install("bioc::GSVA", lock = TRUE)
renv::install("bioc::pathview", lock = TRUE)
renv::install("bioc::singscore", lock = TRUE) # ConsensusTME
renv::install("cansysbio/ConsensusTME", lock = TRUE)
renv::install("estimate", repos="http://r-forge.r-project.org", dependencies = TRUE, lock = TRUE) # https://bioinformatics.mdanderson.org/estimate/rpackage.html
renv::install("msigdbr", lock = TRUE)
renv::install("bioc::biomaRt", lock = TRUE)
renv::install("bioc::preprocessCore", lock = TRUE)
renv::install("federicomarini/quantiseqr", dependencies = TRUE, build_vignettes = TRUE, lock = TRUE)
renv::install("bioc::sva", lock = TRUE)
renv::install("ebecht/MCPcounter",ref="master", subdir="Source", lock = TRUE)
renv::install('hanfeisun/TIMER', lock = TRUE)
renv::install('dviraran/xCell', force = TRUE, lock = TRUE)
renv::install("omnideconv/immunedeconv", lock = TRUE)
renv::install("bioc::viper", lock = TRUE)
#
renv::install("NSM3", lock = TRUE)
renv::install("pwr", lock = TRUE)
renv::install("missForest", lock = TRUE)
renv::install("beeswarm", lock = TRUE)
renv::install("circlize", lock = TRUE)
renv::install("bioc::org.Hs.eg.db", force = TRUE, lock = TRUE)
renv::install("bioc::org.Mm.eg.db", force = TRUE, lock = TRUE)
renv::install("doParallel", lock = TRUE)
renv::install("foreach", lock = TRUE)
renv::install("pheatmap", lock = TRUE)
renv::install("rvest", lock = TRUE)
renv::install("xml2", lock = TRUE)
renv::install("openxlsx", lock = TRUE)
renv::install("bioc::ComplexHeatmap", lock = TRUE)
renv::install("tidyverse", lock = TRUE)
renv::install("data.table", lock = TRUE)
renv::install("survminer", lock = TRUE)
renv::install("survival", lock = TRUE)
renv::install("gridExtra", lock = TRUE)
renv::install("MASS", lock = TRUE)
renv::install("coin", lock = TRUE)
renv::install("bioc::AnnotationDbi", lock = TRUE)
renv::install("RhpcBLASctl", lock = TRUE)
renv::install("psych", lock = TRUE)
renv::install("bioc::rtracklayer", lock = TRUE)
# ssGSEA2
gitcreds::gitcreds_set()
# # then paste the below
# github_pat*************************************************************
renv::install("RGLab/RProtoBufLib", lock = TRUE) # from github
# renv::install("bioc::RProtoBufLib") # from biocmanager
renv::install("bioc::cmapR", force = TRUE)
# renv::install("bioc::flowCore", force = TRUE) # It was installed with cmapR
# renv::install("bioc::cytolib", force = TRUE) # It was installed with cmapR
renv::install("nicolerg/ssGSEA2", lock = TRUE)RシングルセルRNAシークエンス解析用
そして以下が、シングルセルRNAシークエンス用のパッケージである。
# single cell RNA sequence
# Basic packages
renv::install("devtools", lock = TRUE)
renv::install("BiocManager", lock = TRUE)
renv::install("remotes", lock = TRUE)
renv::install("renv", lock = TRUE)
renv::install("pak", lock = TRUE)
renv::install('fs', lock = TRUE)
renv::install('curl', lock = TRUE)
renv::install('systemfonts', lock = TRUE)
renv::install('sass', lock = TRUE)
renv::install(c("credentials", "httr2", "bslib", "systemfonts", "textshaping"), lock = TRUE)
renv::install(c('ragg', 'xml2'), lock = TRUE)
renv::install(c('pkgdown', 'roxygen2', 'urlchecker'), lock = TRUE)
renv::install("devtools", lock = TRUE)
renv::install("pak", lock = TRUE)
renv::install("Rcpp", lock = TRUE)
#
renv::install("NSM3", lock = TRUE)
renv::install("pwr", lock = TRUE)
renv::install("missForest", lock = TRUE)
renv::install("beeswarm", lock = TRUE)
renv::install("circlize", lock = TRUE)
renv::install("bioc::org.Hs.eg.db", force = TRUE, lock = TRUE)
renv::install("bioc::org.Mm.eg.db", force = TRUE, lock = TRUE)
renv::install("doParallel", lock = TRUE)
renv::install("foreach", lock = TRUE)
renv::install("pheatmap", lock = TRUE)
renv::install("rvest", lock = TRUE)
renv::install("xml2", lock = TRUE)
renv::install("openxlsx", lock = TRUE)
renv::install("bioc::ComplexHeatmap", lock = TRUE)
renv::install("tidyverse", lock = TRUE)
renv::install("data.table", lock = TRUE)
renv::install("survminer", lock = TRUE)
renv::install("survival", lock = TRUE)
renv::install("gridExtra", lock = TRUE)
renv::install("MASS", lock = TRUE)
renv::install("coin", lock = TRUE)
renv::install("bioc::AnnotationDbi", lock = TRUE)
renv::install("RhpcBLASctl", lock = TRUE)
renv::install("psych", lock = TRUE)
renv::install("bioc::rtracklayer", lock = TRUE)
gitcreds::gitcreds_set()
# # then paste the below
# github_pat*************************************************************
renv::install("bioc::anndataR", lock = TRUE)
renv::install("hdf5r", lock = TRUE)
renv::install("pmbio/MuDataSeurat", lock = TRUE)
renv::install("bioc::LoomExperiment", lock = TRUE)
renv::install("bioc::SingleCellExperiment", lock = TRUE)
renv::install("cellgeni/sceasy", lock = TRUE)
renv::install("cellgeni/schard", lock = TRUE)
renv::install("Seurat", lock = TRUE)
setRepositories(ind = 1:3, addURLs = c('https://satijalab.r-universe.dev', 'https://bnprks.r-universe.dev/'))
renv::install(c("BPCells", "presto", "glmGamPoi"), lock = TRUE)
renv::install('Signac', lock = TRUE)
renv::install("satijalab/seurat-data", lock = TRUE)
renv::install("bioc::DirichletMultinomial", lock = TRUE)
renv::install("bioc::BSgenome.Hsapiens.UCSC.hg38", lock = TRUE) # azimuth
renv::install("bioc::EnsDb.Hsapiens.v86", lock = TRUE) # azimuth
renv::install("bioc::JASPAR2020", lock = TRUE) # azimuth
renv::install("bioc::TFBSTools", lock = TRUE) # azimuth
renv::install("satijalab/azimuth", lock = TRUE)
renv::install("mojaveazure/seurat-disk", lock = TRUE)
renv::install("satijalab/seurat-wrappers", lock = TRUE)
renv::install("harmony", lock = TRUE)
renv::install("bioc::SingleCellExperiment", lock = TRUE)
renv::install("bioc::SummarizedExperiment", lock = TRUE)
renv::install("sctransform", lock = TRUE)
renv::install("thomasp85/patchwork", lock = TRUE)
renv::install("bioc::rtracklayer", lock = TRUE)
renv::install("bioc::scds", lock = TRUE)
renv::install("bioc::celldex", lock = TRUE)
renv::install("bioc::SingleR", lock = TRUE)
# library(HGNChelper)
renv::install("waldronlab/HGNChelper", lock = TRUE)
renv::install("openxlsx", dependencies = TRUE, lock = TRUE)
renv::install('chris-mcginnis-ucsf/DoubletFinder', lock = TRUE)
renv::install("bioc::escape", lock = TRUE)
renv::install("bioc::GSVA", lock = TRUE)
renv::install("alserglab/fgsea", lock = TRUE)
renv::install("bioc::dittoSeq", lock = TRUE)
renv::install("bioc::GSEABase", lock = TRUE)
renv::install("bioc::TabulaMurisSenisData", lock = TRUE)
renv::install("bioc::scRNAseq", lock = TRUE)
renv::install("bioc::scuttle", lock = TRUE)
renv::install("elswob/SCRAN", lock = TRUE)
renv::install("bioc::scran", lock = TRUE)
renv::install("bioc::bluster", lock = TRUE)
renv::install("bioc::scater", lock = TRUE)
# library(ape)
renv::install("emmanuelparadis/ape", lock = TRUE)
renv::install("outliers", lock = TRUE)
renv::install("bioc::impute", lock = TRUE) # MetaDE
renv::install("bioc::edgeR", lock = TRUE) # MetaDE
renv::install("bioc::DESeq2", lock = TRUE) # MetaDE
renv::install("bioc::limma", lock = TRUE) # MetaDE
renv::install("metaOmics/MetaDE", lock = TRUE)
# scMCA requires ggplot2/reshape2/plotly/shiny/shinythemes/shiny
renv::install("shinythemes", lock = TRUE)
renv::install("ggjlab/scMCA", lock = TRUE)
renv::install("CostaLab/sc2marker", build_vignettes = TRUE, lock = TRUE)
renv::install("bioc::UCell", lock = TRUE)
renv::install("rlbarter/superheat", lock = TRUE)
renv::install("pheatmap", lock = TRUE)
renv::install("bioc::ComplexHeatmap", lock = TRUE)
renv::install("units", lock = TRUE) # monocle3
renv::install("sf", lock = TRUE) # monocle3
renv::install("cole-trapnell-lab/monocle3", lock = TRUE) # monocle3
renv::install("bioc::MAST", lock = TRUE)
renv::install("tidyverse", lock = TRUE)
renv::install("JiekaiLab/dior", lock = TRUE)
renv::install("bioc::DelayedArray", lock = TRUE)
renv::install("bioc::scone", lock = TRUE)
renv::install("kstreet13/slingshot", lock = TRUE)
renv::install("uwot", lock = TRUE)
renv::install("mclust", lock = TRUE)
renv::install("RColorBrewer", lock = TRUE)
renv::install("bioc::tradeSeq", lock = TRUE)
renv::install("bioc::pcaMethods", lock = TRUE)
renv::install("igraph", lock = TRUE)
renv::install("r-lib/cpp11", lock = TRUE)
# renv::install("velocyto-team/velocyto.R", lock = TRUE) # C++ compatibility can not be solved. therefore it was gave up to install.
# renv::install("satijalab/seurat-wrappers", lock = TRUE) # C++ compatibility can not be solved. therefore it was gave up to install.
renv::install("foreach", lock = TRUE)
renv::install("doParallel", lock = TRUE)
renv::install("foreach", lock = TRUE)
renv::install("jinworks/CellChat", lock = TRUE)
renv::install("renozao/pkgmaker", lock = TRUE) # for latest NMF, but it was not required for renv::install("NMF", lock = TRUE)
renv::install("renozao/repotools", lock = TRUE)# for latest NMF, but it was not required for renv::install("NMF", lock = TRUE)
# renv::install("renozao/NMF", lock = TRUE) # it does not work.
renv::install("NMF", lock = TRUE) # it works.
renv::install("ggalluvial", lock = TRUE)
renv::install("wordcloud", lock = TRUE)
renv::install("circlize", lock = TRUE)
renv::install("anndata", lock = TRUE)R結局Rでh5adを一発でSeuratオブジェクトにするのはうまく行かない
一番最後のanndataだけど、これをRで利用するのはおすすめ出来ない。Pythonのライブラリをテキトウに使い出すので、非常に面倒かつ危ないように思う。AnndataRはまだましだけど、結局、これらでh5adをちゃんと、思った通りに、正しくSeuratオブジェクトに変換できなかった。