Skill Tracer
Skills › Scientific Agent Skills › scanpy › r_interop.md

r_interop.md

310 lines · skills/scanpy/references/r_interop.md at 5f2bc03

Open on GitHub

Most marks come from matching words in the file, so treat them as pointers.

1# R Interoperability for Scanpy
2
3Many single-cell datasets arrive as R objects (`.rds`, `.RData`, Seurat, or SingleCellExperiment) even when the downstream analysis should happen in Scanpy. Agents should convert these inputs to AnnData `.h5ad` first, then continue with normal Scanpy workflows.
4
5Reviewed 2026-10-01 against the linked official R/Seurat/zellkonverter interfaces.
6R installation and conversions below are illustrative; this refresh did not execute an R environment.
7

R Interoperability for Scanpy

Many single-cell datasets arrive as R objects (.rds, .RData, Seurat, or SingleCellExperiment) even when the downstream analysis should happen in Scanpy. Agents should convert these inputs to AnnData .h5ad first, then continue with normal Scanpy workflows.

Reviewed 2026-10-01 against the linked official R/Seurat/zellkonverter interfaces. R installation and conversions below are illustrative; this refresh did not execute an R environment.

Raw lines 1 to 7
8## Operating Principles
9
101. **Do not parse Seurat `.rds` directly in Python.** Use R to deserialize R objects and write `.h5ad`.
112. **Prefer `.h5ad` as the Python handoff format.** After conversion, all QC, clustering, plotting, and exports should use Scanpy/AnnData.
123. **Inspect before converting.** Determine whether the R object is Seurat, SingleCellExperiment, or a list/container; do not assume from the filename.
134. **Preserve raw counts and metadata.** Keep cell metadata (`obs`), gene metadata (`var`), raw counts/layers, and dimensional reductions when available.
145. **Use noninteractive commands.** Agents should use `Rscript -e` or script files, set CRAN repos explicitly, and pass `ask = FALSE`, `update = FALSE` for Bioconductor installs.

Operating Principles

  1. **Do not parse Seurat .rds directly in Python.** Use R to deserialize R objects and write .h5ad.
  2. **Prefer .h5ad as the Python handoff format.** After conversion, all QC, clustering, plotting, and exports should use Scanpy/AnnData.
  3. Inspect before converting. Determine whether the R object is Seurat, SingleCellExperiment, or a list/container; do not assume from the filename.
  4. Preserve raw counts and metadata. Keep cell metadata (obs), gene metadata (var), raw counts/layers, and dimensional reductions when available.
  5. Use noninteractive commands. Agents should use Rscript -e or script files, set CRAN repos explicitly, and pass ask = FALSE, update = FALSE for Bioconductor installs.
Raw lines 8 to 15
16## Detect R and the Platform
18Use these checks before installing anything:
20```bash
21uname -s 2>/dev/null || true
22command -v Rscript || command -v R || true
23Rscript --version 2>/dev/null || R --version 2>/dev/null || true
24```
26On Windows from PowerShell:
28```powershell
29Get-Command Rscript -ErrorAction SilentlyContinue | Select-Object -ExpandProperty Source
30Get-Command R -ErrorAction SilentlyContinue | Select-Object -ExpandProperty Source
31```
33If Git Bash cannot find R on Windows, query PowerShell or common install paths:
35```powershell
36Get-ChildItem "C:\Program Files\R" -Filter Rscript.exe -Recurse -ErrorAction SilentlyContinue |
37 Select-Object -First 1 -ExpandProperty FullName
38```
40Then call the discovered executable with quotes, for example:
42```bash
43"/c/Program Files/R/R-4.6.0/bin/Rscript.exe" --version
44```

Detect R and the Platform

Use these checks before installing anything:

uname -s 2>/dev/null || true
command -v Rscript || command -v R || true
Rscript --version 2>/dev/null || R --version 2>/dev/null || true

On Windows from PowerShell:

Get-Command Rscript -ErrorAction SilentlyContinue | Select-Object -ExpandProperty Source
Get-Command R -ErrorAction SilentlyContinue | Select-Object -ExpandProperty Source

If Git Bash cannot find R on Windows, query PowerShell or common install paths:

Get-ChildItem "C:\Program Files\R" -Filter Rscript.exe -Recurse -ErrorAction SilentlyContinue |
  Select-Object -First 1 -ExpandProperty FullName

Then call the discovered executable with quotes, for example:

"/c/Program Files/R/R-4.6.0/bin/Rscript.exe" --version
Raw lines 16 to 45
Runs code bin/Rscript.exe :43
46## Install R by OS
48Prefer existing system package managers. If installation requires GUI approval, admin credentials, or an unavailable package manager, stop and report the blocker.

Install R by OS

Prefer existing system package managers. If installation requires GUI approval, admin credentials, or an unavailable package manager, stop and report the blocker.

Raw lines 46 to 49
50### macOS
52Use Homebrew when available:
54```bash
55brew install --cask r-app
56```
58For packages with compiled code, install command-line build tools if the system asks for compilers:
60```bash
61xcode-select --install
62```
64Some R packages with Fortran code may require the CRAN macOS toolchain from `https://mac.R-project.org/tools/`. Prefer CRAN binary packages where possible to avoid compiler work.

macOS

Use Homebrew when available:

brew install --cask r-app

For packages with compiled code, install command-line build tools if the system asks for compilers:

xcode-select --install

Some R packages with Fortran code may require the CRAN macOS toolchain from https://mac.R-project.org/tools/. Prefer CRAN binary packages where possible to avoid compiler work.

Raw lines 50 to 65
66### Linux
68Debian/Ubuntu:
70```bash
71sudo apt-get update
72sudo apt-get install -y \
73 r-base r-base-dev build-essential gfortran \
74 libcurl4-openssl-dev libssl-dev libxml2-dev libhdf5-dev \
75 libharfbuzz-dev libfribidi-dev libfontconfig1-dev libfreetype6-dev \
76 libpng-dev libtiff5-dev libjpeg-dev
77```
79Fedora/RHEL-like systems:
81```bash
82sudo dnf install -y \
83 R R-devel gcc gcc-c++ gcc-gfortran make \
84 libcurl-devel openssl-devel libxml2-devel hdf5-devel \
85 harfbuzz-devel fribidi-devel fontconfig-devel freetype-devel \
86 libpng-devel libtiff-devel libjpeg-turbo-devel
87```
89If `sudo` is unavailable, use a managed environment such as Conda/Mamba if already present:
91```bash
92conda install -c conda-forge r-base r-essentials
93```

Linux

Debian/Ubuntu:

sudo apt-get update
sudo apt-get install -y \
  r-base r-base-dev build-essential gfortran \
  libcurl4-openssl-dev libssl-dev libxml2-dev libhdf5-dev \
  libharfbuzz-dev libfribidi-dev libfontconfig1-dev libfreetype6-dev \
  libpng-dev libtiff5-dev libjpeg-dev

Fedora/RHEL-like systems:

sudo dnf install -y \
  R R-devel gcc gcc-c++ gcc-gfortran make \
  libcurl-devel openssl-devel libxml2-devel hdf5-devel \
  harfbuzz-devel fribidi-devel fontconfig-devel freetype-devel \
  libpng-devel libtiff-devel libjpeg-turbo-devel

If sudo is unavailable, use a managed environment such as Conda/Mamba if already present:

conda install -c conda-forge r-base r-essentials
Raw lines 66 to 94
95### Windows
97Use `winget` from PowerShell when available:
99```powershell
100winget install --id RProject.R -e
101```
103Install Rtools only if packages need compilation:
105```powershell
106winget install --id RProject.Rtools -e
107```
109After installation, open a new shell or locate `Rscript.exe` under `C:\Program Files\R\R-*\bin\`. In Git Bash, call Windows executables through quoted paths or PowerShell; do not assume `/usr/bin/R` exists.

Windows

Use winget from PowerShell when available:

winget install --id RProject.R -e

Install Rtools only if packages need compilation:

winget install --id RProject.Rtools -e

After installation, open a new shell or locate Rscript.exe under C:\Program Files\R\R-*\bin\. In Git Bash, call Windows executables through quoted paths or PowerShell; do not assume /usr/bin/R exists.

Raw lines 95 to 110
Runs code bin/R :109
111## Install Conversion Packages
113Create a project-local R library when you do not want to alter the user's global R library:
115```bash
116mkdir -p .r-lib
117export R_LIBS_USER="$PWD/.r-lib"
118```
120Install the core conversion stack:
122```bash
123Rscript -e 'options(repos = c(CRAN = "https://cloud.r-project.org")); install.packages(c("BiocManager", "remotes"), Ncpus = max(1, parallel::detectCores() - 1)); BiocManager::install(c("SingleCellExperiment", "zellkonverter"), ask = FALSE, update = FALSE)'
124```
126Install Seurat support only when the input is a Seurat object:
128```bash
129Rscript -e 'options(repos = c(CRAN = "https://cloud.r-project.org")); install.packages(c("Seurat", "SeuratObject"), Ncpus = max(1, parallel::detectCores() - 1))'
130```
132Optional SeuratDisk fallback for h5Seurat-to-h5ad conversion:
134```bash
135Rscript -e 'options(repos = c(CRAN = "https://cloud.r-project.org")); if (!requireNamespace("remotes", quietly = TRUE)) install.packages("remotes"); remotes::install_github("mojaveazure/seurat-disk", upgrade = "never")'
136```
138Avoid `sceasy` as the first choice. It can work, but it depends on `reticulate`/Python environment coupling and has more version-specific failure modes. Use it only after `zellkonverter` and SeuratDisk paths fail.

Install Conversion Packages

Create a project-local R library when you do not want to alter the user's global R library:

mkdir -p .r-lib
export R_LIBS_USER="$PWD/.r-lib"

Install the core conversion stack:

Rscript -e 'options(repos = c(CRAN = "https://cloud.r-project.org")); install.packages(c("BiocManager", "remotes"), Ncpus = max(1, parallel::detectCores() - 1)); BiocManager::install(c("SingleCellExperiment", "zellkonverter"), ask = FALSE, update = FALSE)'

Install Seurat support only when the input is a Seurat object:

Rscript -e 'options(repos = c(CRAN = "https://cloud.r-project.org")); install.packages(c("Seurat", "SeuratObject"), Ncpus = max(1, parallel::detectCores() - 1))'

Optional SeuratDisk fallback for h5Seurat-to-h5ad conversion:

Rscript -e 'options(repos = c(CRAN = "https://cloud.r-project.org")); if (!requireNamespace("remotes", quietly = TRUE)) install.packages("remotes"); remotes::install_github("mojaveazure/seurat-disk", upgrade = "never")'

Avoid sceasy as the first choice. It can work, but it depends on reticulate/Python environment coupling and has more version-specific failure modes. Use it only after zellkonverter and SeuratDisk paths fail.

Raw lines 111 to 139
140## Inspect R Inputs
142For `.rds` files:
144```bash
145Rscript -e 'obj <- readRDS("input.rds"); print(class(obj)); if (is.list(obj) && !is.data.frame(obj)) print(names(obj))'
146```
148For `.RData`/`.rda` files:
150```bash
151Rscript -e 'e <- new.env(parent = emptyenv()); load("input.RData", envir = e); print(ls(e)); print(lapply(as.list(e), class))'
152```
154The script below takes one `.rds`, not an `.RData` workspace. Select the intended
155Seurat or SingleCellExperiment object from `e`, then `saveRDS(e[["object_name"]], "input.rds")`.
156A bare SummarizedExperiment must first be explicitly converted to SingleCellExperiment. If there is ambiguity, ask the user which object to convert.

Inspect R Inputs

For .rds files:

Rscript -e 'obj <- readRDS("input.rds"); print(class(obj)); if (is.list(obj) && !is.data.frame(obj)) print(names(obj))'

For .RData/.rda files:

Rscript -e 'e <- new.env(parent = emptyenv()); load("input.RData", envir = e); print(ls(e)); print(lapply(as.list(e), class))'

The script below takes one .rds, not an .RData workspace. Select the intended Seurat or SingleCellExperiment object from e, then saveRDS(e[["object_name"]], "input.rds"). A bare SummarizedExperiment must first be explicitly converted to SingleCellExperiment. If there is ambiguity, ask the user which object to convert.

Raw lines 140 to 157
Involves a person ask the user :156
158## Convert `.rds` to `.h5ad`
160Use this script as the default conversion path. It handles SingleCellExperiment directly and converts Seurat objects through SingleCellExperiment before writing `.h5ad`.
162```r
163#!/usr/bin/env Rscript
165args <- commandArgs(trailingOnly = TRUE)
166if (length(args) < 2) {
167 stop("Usage: Rscript convert_rds_to_h5ad.R input.rds output.h5ad [assay]", call. = FALSE)
170input <- normalizePath(args[[1]], mustWork = TRUE)
171output <- args[[2]]
172assay <- if (length(args) >= 3) args[[3]] else NULL
174options(repos = c(CRAN = "https://cloud.r-project.org"))
176ensure_pkg <- function(pkg, bioc = FALSE) {
177 if (!requireNamespace(pkg, quietly = TRUE)) {
178 if (bioc) {
179 if (!requireNamespace("BiocManager", quietly = TRUE)) {
180 install.packages("BiocManager")
181 }
182 BiocManager::install(pkg, ask = FALSE, update = FALSE)
183 } else {
184 install.packages(pkg)
185 }
186 }
189ensure_pkg("SingleCellExperiment", bioc = TRUE)
190ensure_pkg("SummarizedExperiment", bioc = TRUE)
191ensure_pkg("zellkonverter", bioc = TRUE)
193obj <- readRDS(input)
194message("Input classes: ", paste(class(obj), collapse = ", "))
196if (inherits(obj, "SingleCellExperiment")) {
197 sce <- obj
198} else if (inherits(obj, "Seurat")) {
199 ensure_pkg("Seurat")
200 ensure_pkg("SeuratObject")
202 obj <- SeuratObject::UpdateSeuratObject(obj)
203 if (is.null(assay)) {
204 assay <- SeuratObject::DefaultAssay(obj)
205 }
207 if ("JoinLayers" %in% getNamespaceExports("SeuratObject")) {
208 obj <- SeuratObject::JoinLayers(obj, assay = assay)
209 }
211 sce <- Seurat::as.SingleCellExperiment(obj, assay = assay)
212} else {
213 stop("Unsupported RDS class: ", paste(class(obj), collapse = ", "), call. = FALSE)
216if (!("counts" %in% SummarizedExperiment::assayNames(sce))) {
217 stop("No counts assay: select an explicit assay and document its representation before conversion.")
219x_name <- "counts"
220zellkonverter::writeH5AD(sce, output, X_name = x_name)
221message("Wrote: ", normalizePath(output, mustWork = FALSE))
222```
224Run it:
226```bash
227Rscript convert_rds_to_h5ad.R input.rds output.h5ad
228```
230If the Seurat object has multiple assays and the user specified one, pass it explicitly:
232```bash
233Rscript convert_rds_to_h5ad.R input.rds output.h5ad RNA
234```

Convert .rds to .h5ad

Use this script as the default conversion path. It handles SingleCellExperiment directly and converts Seurat objects through SingleCellExperiment before writing .h5ad.

#!/usr/bin/env Rscript

args <- commandArgs(trailingOnly = TRUE)
if (length(args) < 2) {
  stop("Usage: Rscript convert_rds_to_h5ad.R input.rds output.h5ad [assay]", call. = FALSE)
}

input <- normalizePath(args[[1]], mustWork = TRUE)
output <- args[[2]]
assay <- if (length(args) >= 3) args[[3]] else NULL

options(repos = c(CRAN = "https://cloud.r-project.org"))

ensure_pkg <- function(pkg, bioc = FALSE) {
  if (!requireNamespace(pkg, quietly = TRUE)) {
    if (bioc) {
      if (!requireNamespace("BiocManager", quietly = TRUE)) {
        install.packages("BiocManager")
      }
      BiocManager::install(pkg, ask = FALSE, update = FALSE)
    } else {
      install.packages(pkg)
    }
  }
}

ensure_pkg("SingleCellExperiment", bioc = TRUE)
ensure_pkg("SummarizedExperiment", bioc = TRUE)
ensure_pkg("zellkonverter", bioc = TRUE)

obj <- readRDS(input)
message("Input classes: ", paste(class(obj), collapse = ", "))

if (inherits(obj, "SingleCellExperiment")) {
  sce <- obj
} else if (inherits(obj, "Seurat")) {
  ensure_pkg("Seurat")
  ensure_pkg("SeuratObject")

  obj <- SeuratObject::UpdateSeuratObject(obj)
  if (is.null(assay)) {
    assay <- SeuratObject::DefaultAssay(obj)
  }

  if ("JoinLayers" %in% getNamespaceExports("SeuratObject")) {
    obj <- SeuratObject::JoinLayers(obj, assay = assay)
  }

  sce <- Seurat::as.SingleCellExperiment(obj, assay = assay)
} else {
  stop("Unsupported RDS class: ", paste(class(obj), collapse = ", "), call. = FALSE)
}

if (!("counts" %in% SummarizedExperiment::assayNames(sce))) {
  stop("No counts assay: select an explicit assay and document its representation before conversion.")
}
x_name <- "counts"
zellkonverter::writeH5AD(sce, output, X_name = x_name)
message("Wrote: ", normalizePath(output, mustWork = FALSE))

Run it:

Rscript convert_rds_to_h5ad.R input.rds output.h5ad

If the Seurat object has multiple assays and the user specified one, pass it explicitly:

Rscript convert_rds_to_h5ad.R input.rds output.h5ad RNA
Raw lines 158 to 235
Runs code bin/env :163
236## SeuratDisk Fallback
238If Seurat-to-SingleCellExperiment conversion fails, try SeuratDisk:
240```r
241library(Seurat)
242library(SeuratDisk)
244obj <- readRDS("input.rds")
245obj <- UpdateSeuratObject(obj)
246DefaultAssay(obj) <- "RNA"
247SaveH5Seurat(obj, filename = "output.h5Seurat", overwrite = TRUE)
248Convert("output.h5Seurat", dest = "h5ad", overwrite = TRUE)
249```
251Be aware that SeuratDisk chooses which assay/layer becomes AnnData `.X` based on the available Seurat slots. If raw counts are essential, validate where counts landed after conversion and copy them into `adata.layers["counts"]` if needed.

SeuratDisk Fallback

If Seurat-to-SingleCellExperiment conversion fails, try SeuratDisk:

library(Seurat)
library(SeuratDisk)

obj <- readRDS("input.rds")
obj <- UpdateSeuratObject(obj)
DefaultAssay(obj) <- "RNA"
SaveH5Seurat(obj, filename = "output.h5Seurat", overwrite = TRUE)
Convert("output.h5Seurat", dest = "h5ad", overwrite = TRUE)

Be aware that SeuratDisk chooses which assay/layer becomes AnnData .X based on the available Seurat slots. If raw counts are essential, validate where counts landed after conversion and copy them into adata.layers["counts"] if needed.

Raw lines 236 to 252
253## Validate in Python
255After conversion, always validate with Scanpy before continuing:
257```python
258import scanpy as sc
260adata = sc.read_h5ad("output.h5ad")
261assert adata.obs_names.is_unique
262assert adata.var_names.is_unique # resolve duplicate IDs with provenance, not silent renaming
263# Compare dimensions, exact cell/gene IDs, selected values and count sums to the R source.
264# Only after confirming X_name="counts" was written from the original count assay:
265adata.layers["counts"] = adata.X.copy()
267print(adata)
268print(adata.obs.head())
269print(adata.var.head())
270print("layers:", list(adata.layers.keys()))
271print("obsm:", list(adata.obsm.keys()))
273adata.write_h5ad("output.validated.h5ad", compression="gzip")
274```
276If the user requested metadata and expression exports:
278```python
279import scipy.io as sio
281adata.obs.to_csv("cell_metadata.csv")
282adata.var.to_csv("gene_metadata.csv")
283sio.mmwrite("expression_matrix.mtx", adata.X)
284```
286For very large datasets, avoid dense CSV expression exports unless the user explicitly asks. Prefer `.h5ad`, Matrix Market (`.mtx`), or sparse-aware downstream analysis.

Validate in Python

After conversion, always validate with Scanpy before continuing:

import scanpy as sc

adata = sc.read_h5ad("output.h5ad")
assert adata.obs_names.is_unique
assert adata.var_names.is_unique  # resolve duplicate IDs with provenance, not silent renaming
# Compare dimensions, exact cell/gene IDs, selected values and count sums to the R source.
# Only after confirming X_name="counts" was written from the original count assay:
adata.layers["counts"] = adata.X.copy()

print(adata)
print(adata.obs.head())
print(adata.var.head())
print("layers:", list(adata.layers.keys()))
print("obsm:", list(adata.obsm.keys()))

adata.write_h5ad("output.validated.h5ad", compression="gzip")

If the user requested metadata and expression exports:

import scipy.io as sio

adata.obs.to_csv("cell_metadata.csv")
adata.var.to_csv("gene_metadata.csv")
sio.mmwrite("expression_matrix.mtx", adata.X)

For very large datasets, avoid dense CSV expression exports unless the user explicitly asks. Prefer .h5ad, Matrix Market (.mtx), or sparse-aware downstream analysis.

Raw lines 253 to 287
288## Troubleshooting
290- **`Rscript: command not found`**: R is not installed or not on PATH. Use the OS-specific install steps above, then reopen the shell or call the full `Rscript` path.
291- **Windows Git Bash cannot find R**: Use PowerShell to locate `Rscript.exe` and invoke the quoted path from Git Bash.
292- **Package compilation fails**: Install system build dependencies (`r-base-dev`, compilers, HDF5/libcurl/OpenSSL/XML headers, Rtools on Windows, or macOS command-line tools).
293- **Bioconductor version mismatch**: Upgrade R when possible. Bioconductor packages are tied to compatible R releases; avoid forcing incompatible versions.
294- **Seurat v5 layer issues**: Try `SeuratObject::JoinLayers()` before conversion, pass the assay explicitly, or use SeuratDisk fallback.
295- **Counts missing or normalized data in `.X`**: Inspect `adata.layers`, `adata.raw`, and value ranges. Keep raw counts in `adata.layers["counts"]` before normalization if available.
296- **Memory pressure**: Convert on a machine with enough RAM, avoid dense exports, and write compressed `.h5ad` checkpoints after successful conversion.

Troubleshooting

  • **Rscript: command not found**: R is not installed or not on PATH. Use the OS-specific install steps above, then reopen the shell or call the full Rscript path.
  • Windows Git Bash cannot find R: Use PowerShell to locate Rscript.exe and invoke the quoted path from Git Bash.
  • Package compilation fails: Install system build dependencies (r-base-dev, compilers, HDF5/libcurl/OpenSSL/XML headers, Rtools on Windows, or macOS command-line tools).
  • Bioconductor version mismatch: Upgrade R when possible. Bioconductor packages are tied to compatible R releases; avoid forcing incompatible versions.
  • Seurat v5 layer issues: Try SeuratObject::JoinLayers() before conversion, pass the assay explicitly, or use SeuratDisk fallback.
  • **Counts missing or normalized data in .X**: Inspect adata.layers, adata.raw, and value ranges. Keep raw counts in adata.layers["counts"] before normalization if available.
  • Memory pressure: Convert on a machine with enough RAM, avoid dense exports, and write compressed .h5ad checkpoints after successful conversion.
Raw lines 288 to 297
298## Sources Checked
300- Current Homebrew cask: https://formulae.brew.sh/cask/r-app (the former token was `r`).
301- Winget manifest IDs: https://github.com/microsoft/winget-pkgs/tree/master/manifests/r/RProject
303- Current signatures: https://theislab.github.io/zellkonverter/reference/writeH5AD.html, https://satijalab.github.io/seurat-object/reference/UpdateSeuratObject.html, https://satijalab.github.io/seurat-object/reference/SplitLayers.html, https://satijalab.org/seurat/reference/as.singlecellexperiment
304- SeuratDisk matrix choice: https://mojaveazure.github.io/seurat-disk/reference/Convert.html
306- R Project and CRAN installation pages: `https://www.r-project.org/`, `https://cran.r-project.org/bin/macosx`, `https://cran.r-project.org/bin/windows/base/rw-FAQ.html`
307- Bioconductor install guidance and BiocManager documentation: `https://www.bioconductor.org/install/`, `https://cran.r-project.org/web/packages/BiocManager/vignettes/BiocManager.html`
308- zellkonverter project and package documentation: `https://www.bioconductor.org/packages/release/bioc/html/zellkonverter.html`, `https://github.com/theislab/zellkonverter`
309- SeuratDisk documentation and repository: `https://mojaveazure.github.io/seurat-disk/`, `https://github.com/mojaveazure/seurat-disk`
310- sceasy repository for fallback context: `https://github.com/cellgeni/sceasy`

Sources Checked

  • Current Homebrew cask: https://formulae.brew.sh/cask/r-app (the former token was r).
  • Winget manifest IDs: https://github.com/microsoft/winget-pkgs/tree/master/manifests/r/RProject
  • Current signatures: https://theislab.github.io/zellkonverter/reference/writeH5AD.html, https://satijalab.github.io/seurat-object/reference/UpdateSeuratObject.html, https://satijalab.github.io/seurat-object/reference/SplitLayers.html, https://satijalab.org/seurat/reference/as.singlecellexperiment
  • SeuratDisk matrix choice: https://mojaveazure.github.io/seurat-disk/reference/Convert.html
  • R Project and CRAN installation pages: https://www.r-project.org/, https://cran.r-project.org/bin/macosx, https://cran.r-project.org/bin/windows/base/rw-FAQ.html
  • Bioconductor install guidance and BiocManager documentation: https://www.bioconductor.org/install/, https://cran.r-project.org/web/packages/BiocManager/vignettes/BiocManager.html
  • zellkonverter project and package documentation: https://www.bioconductor.org/packages/release/bioc/html/zellkonverter.html, https://github.com/theislab/zellkonverter
  • SeuratDisk documentation and repository: https://mojaveazure.github.io/seurat-disk/, https://github.com/mojaveazure/seurat-disk
  • sceasy repository for fallback context: https://github.com/cellgeni/sceasy
Raw lines 298 to 310
Runs code bin/macosx :306
Runs code bin/windows/base/rw-FAQ.html :306