Skip to contents

scop 0.9.0

  • feat:
    • Added ConvertHomologs() for homologous feature conversion in Seurat, matrix, and Matrix objects. The function uses GeneConvert() for arbitrary Ensembl/biomaRt-supported species pairs, collapses duplicated target homologs by summing expression values, preserves Seurat cell metadata and spatial images, and stores the mapping table in @tools$ConvertHomologs.
    • Added RunCytoSPACE(), a native R/C++ implementation of the default CytoSPACE spot-level assignment workflow. The native backend uses spot-capacity graph construction and precomputed Pearson correlation matrices, stores detailed results in srt@tools[["CytoSPACE"]], and writes summary metadata columns with the requested prefix.
    • Added SpatialSpotPlot() for spatial visualization, including examples that show both tissue annotations and downstream CytoSPACE assignment results.
    • Added a shared native progress helper in src/log_message.h for long-running C++ loops. CytoSPACE assignment, scTenifold tensor decomposition, proportion permutation/bootstrap, and sample-level proportion bootstrap now report progress with the same timestamped information style as thisutils::log_message().
  • fix:
    • RunCellphoneDB(): Replaced the internal manual homolog-expression conversion path with ConvertHomologs(), keeping expression-object conversion behavior consistent across the package.
    • GeneConvert() examples now direct expression-object homolog conversion to ConvertHomologs() instead of showing manual geneID_expand aggregation.
    • Cleaned up package-check issues by declaring missing namespace imports and aligning Rd argument documentation for recently updated wrappers.
    • Optional wrapper dependencies are checked at function entry with check_r() instead of silently skipping examples or adding unnecessary hard dependencies.
  • docs:
    • Updated the pkgdown reference grouping for spatial analysis, spatial visualization, data conversion, and composition-analysis functions.
    • Updated RunCytoSPACE() examples to use real bundled data, convert mouse reference data with ConvertHomologs(), and visualize assignment results.
    • Refreshed examples to use bundled real package data and removed unnecessary dontrun wrappers from examples that do not require Python or external command-line tools.
  • data:
    • Added visium_human_pancreas_sub, a Visium human pancreas spatial example dataset (GSE254829) with spatial image data and CODA-derived annotations, for spatial analysis.

scop 0.8.9

  • fix:
    • RunGSVA(): Removed redundant dense as.matrix() conversion in single-cell mode for backend = "r"; sparse expression matrices now stay sparse through row filtering, reducing peak memory and avoiding unnecessary dense materialization.
    • RunCellQC(): Replaced Seurat::SplitObject() with lazy cell-name-based subsetting, avoiding full-object duplication per split group. Added caching of GetAssay() gene names, GetAssayData5() counts, and per-cell QC metrics (nCount / nFeature) outside the species-check loop to eliminate repeated data extraction.
    • RunDEtest(): Pre-computed cell index mapping (split(names(cell_group), cell_group)) for paired-marker tests, replacing per-pair which() calls with O(1) list lookups.
    • AnnotateFeatures(): Replaced per-detail sapply(… "[") with type-stable vapply(…, character(1)) to avoid implicit list-to-character coercion.
    • run_scomm(): Deferred dense conversion for reference and query subsetting by removing premature as.matrix() calls; sparse matrices are subset first, then densified only when required.
    • RunUMAP2(): Replaced isSymmetric(as.matrix(graph)) with sparse-native Matrix::isSymmetric(graph) in symmetry checks and graph subset sampling, avoiding dense materialization of large neighbor graphs.
    • RunUMAP2(): Replaced apply(as.matrix(graph), 2, order) in the uwot-predict path with the internal C++ sparse column top-k helper (run_sparse_topk_by_column()), avoiding full dense conversion and column-wise R-level apply().
    • RunDimsReduction() (PCA centering): Uses SeuratObject::LayerData(…, features = features) to read only HVF rows from scale.data instead of loading the full matrix followed by manual subsetting.
    • RunMDS(): Removed as.matrix() before Matrix::t(); proxyC::dist now receives the sparse matrix directly, avoiding dense conversion of large count matrices.
    • integration.R (fastMNN): Removed three as.matrix() calls passed to batchelor::fastMNN(), which accepts sparse matrices natively via SingleCellExperiment.
    • standard_scop(): Replaced full scale.data matrix load (via GetAssayData5()) with direct layer access (SeuratObject::GetAssayData for Assay5; @scale.data for Assay) to retrieve only rownames when checking whether HVFs have been scaled, substantially reducing peak memory during the ScaleData decision step.
    • GetAssayData5.Assay(): Fixed parameter naming to use positional matching for the slot/layer argument, so GetAssayData5() correctly retrieves counts, data, and scale.data layers in both Seurat v4 (slot) and v5 (layer). Previously the named layer argument was silently dropped by SeuratObject v4, always returning the data slot regardless of the requested layer.
    • CSS_integrate(): Added Assay5 guard before SeuratObject::JoinLayers() to avoid errors with Seurat v4 Assay objects, which do not support layered storage.
    • RunDimsReduction(): Added Seurat v4 fallback for PCA centering — SeuratObject::LayerData(…, features = …) is Assay5-only; v4 Assay objects now use GetAssayData5() with manual feature subsetting.
    • integration_scop(): Added early detection for v5-only integration methods (CCA, RPCA, fastMNN5, Harmony5, scVI5) to provide a clear, actionable error message when used with Seurat v4 Assay objects, rather than failing deep in the call stack.
  • feat:
    • Added loom_to_srt() for pure-R loom-to-Seurat conversion via rhdf5, preserving velocity-style spliced and unspliced layers as assays without initializing Python, and added Python-backed loom_to_adata() for users who need AnnData output.
    • Added RunBulk() as a unified bulk-strategy entrypoint with method-vector selection for bulk DE, deconvolution, and cell-type-specific DE workflows.
    • Added method-specific bulk runners for de_limma_voom, de_edgeR_qlf, de_DESeq2, de_dream, deconv_MuSiC, deconv_BisqueRNA, deconv_BayesPrism, and csde_TOAST.
    • Standardized bulk results under Bulk$results$de, Bulk$results$deconv, and Bulk$results$csde, keeping DE outputs compatible with existing DEtestPlot(), RunEnrichment(), RunGSEA(), GroupHeatmap(), and FeatureHeatmap() data flows.
    • RunBulk(run_enrichment = TRUE, run_gsea = TRUE) now filters bulk DE rows with pathway thresholds and mirrors successful pathway results to Enrichment_Bulk_wilcox and GSEA_Bulk_wilcox, so EnrichmentPlot() and GSEAPlot() can read them through the standard srt@tools contract.
    • Deconvolution and CSDE bundles now record their computational engine in details; the current deconvolution runners use explicit backend = "internal" SCOP profile fitting and csde_TOAST uses explicit backend = "limma_interaction", so native package backends can be wired in later without pretending to call external packages.
    • Added explicit Remotes entries for mengxu98/thisplot and mengxu98/thisutils so source installs can resolve the minimum imported versions required by SCOP. Optional bulk engines such as DESeq2 and variancePartition are installed on demand through check_r() and called lazily through get_namespace_fun().
    • Added method_args to expose method-specific tuning parameters without expanding the public API surface.

scop 0.8.8

  • deps:
  • docs:
    • Updated pkgdown reference grouping for the cell-cycle workflow.
  • fix:
    • Added optional wrappers for RunDorothea(), RunBayesSpace(), and experimental RunscTenifoldKnk(). RunscTenifoldKnk() keeps the upstream scTenifoldNet workflow but fixes the QC gene-filter assignment in the local path, uses a native equivalent covariance/downdate path with direct sparse matrix construction, selection-based quantile thresholding, and controlled per-gene eigensolver parallelism for large pcNet() network construction, and uses native helpers for tensor decomposition, manifold matrix construction, directionality, and differential-regulation distance calculations. The native tensor-decomposition path now computes MTTKRP updates directly instead of materializing four dense unfolding matrices.
    • PrepareEnv(): Added explicit support for mamba and micromamba executables in addition to conda, including command-name resolution, automatic package-managed micromamba download when conda = "micromamba" is requested and the command is not on PATH, manager-aware logging, micromamba env path detection, and ToS handling that only runs for standard conda. Package-managed micromamba environments now use a no-space cache root to avoid micromamba run -p path parsing failures. PrepareEnv() now also stops early if reticulate has already initialized a different Python executable, avoiding unsafe in-session switches between conda and micromamba. The Python stack now also pins setuptools < 81 so legacy packages such as trimap can still import pkg_resources.
    • PrepareEnv(): The default modules = NULL environment no longer includes scomm; install it explicitly with modules = "scomm" because the TensorFlow/scOMM stack conflicts with the default JAX/scVI stack through incompatible ml-dtypes requirements.
    • CheckDataList() / standard_scop(): Removed an unnecessary all-feature ScaleData() call immediately after LogNormalize. Downstream workflows still scale the selected HVFs before PCA, but large raw-count inputs no longer create a dense all-gene scale.data intermediate during checking.
    • srt_reorder(): Replaced per-cluster repeated sparse subsetting and rowMeans() with a single sparse group-membership matrix multiplication, speeding the cluster-reordering step used by standard_scop() while preserving average expression values.
    • FindExpressedMarkers(): Added a sparse fold-change and detection-rate prefilter path for common sparse RNA inputs, avoiding dense all-feature expression materialization before marker filtering while preserving default results. Supplied features are now intersected with the active layer before dense fallback scoring, which also keeps scale.data and partial-feature layers from passing absent rows into fold-change calculation.
    • C++-accelerated backends are now the default where available: RunMetabolism(), RunGSVA(), CellScoring(), RunDynamicEnrichment(), and RunEnrichment() now prefer backend = "cpp" while retaining backend = "r" for exact legacy/package behavior. RunPermutation() now uses its validated native implementation directly.
    • RunMetabolism() and RunGSVA(): Added a reusable C++ gene-set scoring backend for ssGSEA, zscore, and plage; RunGSVA() can now use backend = "cpp" for method = "ssgsea", method = "zscore", method = "plage", and Gaussian- or Poisson-kernel method = "gsva". PLAGE scores are oriented by the gene set mean z-score to avoid backend-dependent sign flips.
    • RunMetabolism() and RunGSVA(): Added cpp_chunk_size for the C++ GSVA kernel paths to reduce peak dense intermediate memory on large cell counts; NULL now auto-selects a chunk size for large matrices.
    • RunEnrichment(): Added an experimental backend = "cpp" ORA path using a native hypergeometric implementation for faster enrichment tables while keeping backend = "r" available as the clusterProfiler-compatible path.
    • CellScoring(): Added experimental backend = "cpp" support for Seurat-style module scoring by keeping control-gene sampling in R and moving sparse mean calculations to native code.
    • RunPermutation(): Uses the native C++ permutation and bootstrap loops directly after validating they match the legacy R calculation for observed fractions and log2 fold-differences while running substantially faster.
    • RunUMAP2(): Added an internal C++ sparse column top-k helper for Graph inputs to speed extraction of precomputed neighbor indices/connectivities before calling uwot.
    • RunKNNMap() and RunKNNPredict(): Added an internal C++ dense column top-k helper for the raw KNN fallback to speed nearest-neighbor extraction from precomputed distance matrices.
    • PseudotimeProjectionPlot(): Reused the internal dense top-k helper for pseudotime KNN/gradient neighbor extraction from distance matrices.
    • Mapping/integration metrics: Added an internal C++ contingency-table helper for metric_accuracy(), metric_macro_f1(), metric_purity(), metric_nmi(), metric_ari(), metric_weighted_recall(), and collect_mapping_metrics().
    • RunMetabolism(): Added a C++ backend for method = "GSVA" that keeps the Poisson-kernel GSVA scoring path but accelerates repeated count-kernel calculations.
    • RunMetabolism() and CellScoring(): Added an experimental C++ backend for AUCell scoring via backend = "cpp" with selectable cpp_strategy values ("sparse", "topk", "full"), while keeping the original R/AUCell implementation available via backend = "r" for exact package output. RunDynamicEnrichment() now passes this backend through to AUCell-based scoring.
    • CellScoring(method = "AUCell"): Fixed score-name assignment when only one feature list is scored, avoiding vector dropping before metadata column names are applied.
    • RunMetabolism(method = "VISION"): Fixed signature construction so in-memory gene sets are passed as VISION::Signature objects instead of being interpreted as file paths.
    • DynamicHeatmap() / custom enrichment workflows: Fixed incorrect term label display when user-provided TERM2GENE / TERM2NAME use non-standard column names such as term / name. Custom term annotations are now normalized consistently so that heatmap term labels show readable term names instead of fallback IDs (e.g. GO IDs). Related issue #160 (@Pineapple-wen6, @mengxu98).
    • Refactored repeated custom database input handling by introducing shared internal helpers for normalizing and assembling user-provided TERM2GENE / TERM2NAME, and applied them across RunEnrichment(), RunDynamicEnrichment(), RunGSEA(), RunGSVA(), and PrepareDB() to keep behavior consistent.
    • integration_scop(): Improved ChromatinAssay handling by standardizing ATAC reductions after integration, avoiding non-interactive small-batch blocking, clipping TFIDF/rlsi anchor dims to available cells, auto-switching Harmony5 to legacy Harmony, and rejecting unsupported Seurat / RPCA ATAC paths with explicit messages.

scop 0.8.7

scop 0.8.6

  • feat:
  • fix:
    • FeatureStatPlot(): Fixed duplicated X/Y axis titles and main title when stack = TRUE with theme_args or title. Stack assembly now strips axis and plot titles from non-edge panels and draws a single shared ylab/title via gtable; theme styling from theme_args (e.g. axis.title.y, title/plot.title) is applied to these shared grobs. Related issue #145 (@PanSX-Dr).
  • docs:
    • Updated the README badge/logo.
  • data:
    • Removed the example datasets ifnb_sub, ref_scHCL, and ref_scZCL.

scop 0.8.5

  • feat:
    • Default palette changed from "Paired" to "Chinese". See thisplot::ChineseColors() for details.
    • Unified the cores parameter across multiple functions (DynamicHeatmap(), FeatureHeatmap(), GroupHeatmap(), and heatmap_enrichment()), ensuring cores is correctly threaded through to RunEnrichment().
    • RunMonocle2() and RunMonocle3(): Added xlab and ylab parameters, passed through to internal CellDimPlot() and FeatureDimPlot() calls.
    • ListDB(): Now supports multiple species in the species parameter simultaneously and adds Species and DB columns to the output data frame for clearer identification.
    • Moved is_outlier to thisutils::is_outlier().
    • configure_apple_silicon_env() (Python function): Added OpenMP compatibility handling on macOS arm64 by prepending environment lib paths to DYLD_FALLBACK_LIBRARY_PATH/DYLD_LIBRARY_PATH and preloading libomp.dylib/libiomp5.dylib via ctypes.CDLL(..., RTLD_GLOBAL) to reduce scanpy/python-igraph import conflicts.
    • scVI_integrate(): Unified parameter naming by renaming num_threads to cores for consistency across integration functions.
    • Added find_neighbors_and_clusters() and run_nonlinear_reduction() helper functions to unify operations across integration functions and reduce redundant code.
  • fix:
    • PrepareDB():
      • TF database now uses AnimalTFDB4 as the data source.
      • MP database - the Web Archive URL year is now dynamically determined from the current date, and the archive snapshot date for all MP-related file downloads (VOC_MammalianPhenotype.rpt, MGI_Gene_Model_Coord.rpt, MGI_GenePheno.rpt) is extracted from the server index page to ensure consistent versioning.
      • hTFtarget data download URL has been changed from "http://bioinfo.life.hust.edu.cn/static/hTFtarget/file_download/tf-target-infomation.txt" to "https://guolab.wchscu.cn/static/hTFtarget/file_download/tf-target-infomation.txt".
      • CSPA data download URL has been changed from "https://wlab.ethz.ch/cspa/data/S1_File.xlsx" to "https://raw.githubusercontent.com/mengxu98/CSPA/main/S1_File.xlsx".
      Related issus #76 (@hwa2Hu), #139 (@pengding774-dot), #140 (@mengxu98).
    • LIGER_integrate()
      • Migrated to the rliger 2.x workflow (rliger::runIntegration() + rliger::quantileNorm() on Seurat object) and now prepares/uses the ligerScaleData layer via rliger::scaleNotCenter() before integration.
      • Updated argument naming/style from LIGER_dims_use to liger_dims_use, and removed legacy quantile-normalization parameter compatibility mapping (ref_dataset), keeping reference as the supported interface.
    • Optimized the installation of some Python packages on Apple Silicon devices.
  • docs:
    • Updated README example code and visualizations. After regenerating figures, the package size was reduced by ~3 MB.

scop 0.8.4

  • fix:
    • FeatureStatPlot() / ExpressionStatPlot(): Fixed box and violin x-axis misalignment when add_box = TRUE with split.by. Groups with fewer than 2 observations are now filtered before violin density estimation (with a warning), and the violin layer uses a consistent position_dodge(width = 0.9) to match the boxplot. Related issue #123 (@oranges7).

scop 0.8.3

  • feat:
    • RunDynamicFeatures(): Added PreTSA method for dynamic feature fitting. The PreTSA algorithm in scop has been re implemented to support parallelization for higher performance. Original research: PreTSA: computationally efficient modeling of temporal and spatial gene expression patterns. Use fit_method = "pretsa" for B-spline-based piecewise truncated spline analysis; fit_method = "gam" (default) keeps generalized additive models. PreTSA supports knot (0 or "auto") and max_knot_allowed when knot = "auto". Relate issue #133.
    • CellDimPlot() and FeatureDimPlot(): Added legend.title parameter (default NULL) to control the legend title. When NULL, default titles are used (e.g. group name for CellDimPlot, feature or empty for FeatureDimPlot).
    • ExpressionStatPlot() and FeatureStatPlot(): Added legend.title parameter (default NULL) for single-legend plots. When NULL, the default title (e.g. keynm or feature/group name) is used. FeatureStatPlot() forwards legend.title to ExpressionStatPlot().
    • Moved StatPlot function to thisplot::StatPlot.
  • fix:
    • DynamicHeatmap() / heatmap_enrichment(): Fixed incorrect db handling when using custom TERM2GENE/TERM2NAME. Enrichment results with Database = "custom" could be incorrectly filtered by default db values (e.g. "GO_BP"), causing false “No term enriched using the threshold” warnings even when enrichment succeeded. Relate issue #133 (@1228849000).

scop 0.8.2

  • feat:
    • Add the DEtestPlot() function, which calls the original VolcanoPlot() and adds two plot types, Manhattan and Ring, controlled by the plot_type parameter (c("volcano", "manhattan", "ring"), default "volcano"). Add standalone functions DEtestManhattanPlot() and DEtestRingPlot() for direct use. Relate issue #121 (@ericavalentini).
    • Differential expression visualization (DEtestPlot(), VolcanoPlot(), DEtestManhattanPlot(), DEtestRingPlot()): added res parameter to accept existing DE results (data.frame). When res is provided, srt is ignored. Data processing supports: (1) group1 or cluster column for grouped plots; (2) no grouping column for a single panel; (3) gene names from row names when gene column is missing. Relate issue #129 (@mengxu98).
    • PrepareEnv(): Update version parameter to specify the Python version of the conda environment. Default is "3.11-1" on Windows and "3.10-1" on macOS and Unix. Relate issue #103 (@PanSX-Dr).
    • RunNMF(): Add the cores parameter for RunNMF() and optimize the printed message.
    • Removed the setting in Python functions that prevents drawing functions from causing R crashes.
  • fix:

scop 0.8.1

scop 0.8.0

  • feat:
    • RunMonocle2(): New function for performing Monocle2 trajectory analysis with support for various dimensionality reduction methods (DDRTree, ICA, tSNE, SimplePPT, L1-graph, SGL-tree). Uses the fixed version of monocle2 from mengxu98/monocle.
    • RunMonocle3(): New function for performing Monocle3 trajectory analysis with support for cell ordering, trajectory learning, and pseudotime computation.
    • RunCytoTRACE(): New native scop implementation for running CytoTRACE 2 analysis to predict cellular potency scores and categories (Differentiated, Unipotent, Oligopotent, Multipotent, Pluripotent, Totipotent) with support for human and mouse species.
    • CytoTRACEPlot(): New function for visualizing CytoTRACE 2 analysis results.

scop 0.7.9

scop 0.7.8

  • fix:
    • RunPalantir(): Fixed unused plot_format parameter error. The parameter is now properly excluded from arguments passed to Python functions. Relate issue #114 (@Moonerss).
    • RunSCVELO(): Fixed PAGA computation error by replacing scv.tl.paga with sc.tl.paga (scanpy implementation) for better stability. The function now uses the same PAGA implementation as RunPAGA() function.
    • RunCellRank(): Fixed GPCCA Schur decomposition error by adding fallback mechanism. When brandts method fails with “subspace_angles” error, the function automatically tries krylov method. If both methods fail, it automatically switches to CFLARE estimator for more robust computation.
    • RunCellRank(): Fixed recover_dynamics error by ensuring velocity_graph and velocity_graph_neg are properly set before calling scv.tl.recover_dynamics() for latent time computation.
  • feat:
    • adata_to_srt(): Removed automatic removal of “X_” prefix from dimensionality reduction names in obsm keys. The function now preserves original reduction names as they are stored in AnnData objects.
  • data:
    • Reducing the size of pancreas_sub example dataset.

scop 0.7.7

  • feat:
    • adata_to_srt(): Enhanced to support multiple AnnData object types including Python AnnData objects (from scanpy/reticulate), R6 AnnData objects from the anndata package (AnnDataR6), and R6 AnnData objects from the anndataR package (InMemoryAnnData). Added internal helper functions get_adata_element() and get_adata_names() for better compatibility. Relate issues #67 (@lisch7), #91 (@mengxu98) and commit91#issuecomment.
  • fix:
    • RunDEtest(): Fixed error when comparing one cluster against multiple clusters using group1 and group2 parameters. Relate issue #111 (@zhaoxiaoyan9225).
    • AnnotateFeatures(): Fixed bug where the function would fail when processing GTF file annotations due to column name matching issues during data naming. The function now correctly handles column name intersections when merging annotation data.

scop 0.7.6

  • feat:
    • RunDM(): Added automatic PCA-based dimensionality reduction when using many features (>1000) to speed up diffusion map computation. The npcs parameter can be used to control the number of principal components used for pre-processing.

scop 0.7.5

  • fix:
  • feat:
    • RunDEtest(): Fixed compatibility issue with SeuratObject 5.0.0+ by replacing deprecated Assays() slot argument with LayerData(). Relate issue #100 (@mattizecos).
    • RunDM(): Added automatic PCA-based dimensionality reduction when using many features (>1000) to speed up diffusion map computation. The npcs parameter can be used to control the number of principal components used for pre-processing.

scop 0.7.3

  • feat:
    • RunCellTypist(): New function for cell type annotation using the CellTypist method.
    • CellTypistModels(): New function for downloading and managing CellTypist pre-trained models.

scop 0.7.2

  • feat:
    • RunCellRank(): Performance optimizations and code improvements.

scop 0.7.1

scop 0.7.0

  • feat:
    • PrepareEnv(): Integrated uv as the primary Python package installer for improved installation speed.
    • check_python(): Now uses uv as the primary installation tool with pip as fallback, significantly improving package installation speed.
    • Added find_uv() and install_uv() internal functions for managing uv package manager installation and detection.

scop 0.6.6

  • docs:
    • Unified documentation format across all R functions:
      • Standardized return value tags: Changed all @returns to @return for consistency.
      • Unified parameter documentation: Replaced all \code{value} with Markdown backticks `value` format.
      • Standardized default value descriptions.
      • Added @md tags: Added @md tags to all functions using Markdown syntax in documentation.
      • Enhanced cross-references: Added @seealso links to related functions where appropriate.

scop 0.6.5

  • feat:
    • PrepareEnv():
      • Added comprehensive environment variable configuration to prevent crashes when calling Python functions, including setting thread limits for OMP, OPENBLAS, MKL, NUMBA, and other libraries. This improves stability on all platforms, especially Apple silicon Macs.
      • Added accept_conda_tos() function to automatically accept conda Terms of Service for required channels, improving the conda environment setup process.
      • Fixed conda Terms of Service acceptance issue in PrepareEnv(). The function now automatically accepts conda Terms of Service for required channels, eliminating the need for manual acceptance. This addresses the issue reported in #85.
    • Multiple Python-based functions (RunPAGA, RunSCVELO, RunPalantir, RunCellRank, RunWOT, RunPHATE, RunPaCMAP, RunTriMap): Enhanced message formatting and code improvements.
    • PrepareSCExplorer(): Fixed package version dependency issues with shiny and bslib compatibility. The function now properly handles bslib theme configuration to work with both shiny 1.6.0 and 1.7.0+, addressing compatibility errors reported in #87.
  • fix:
    • Improved code formatting and consistency across multiple functions.
    • Enhanced Python functions in inst/python/functions.py with better error handling and message formatting.
  • docs:
    • Updated documentation for multiple functions to reflect code improvements.

scop 0.6.2

  • feat:
    • CellChatPlot(): Adjusted the size of saved figures for better file size optimization.
  • docs:
    • Updated README.md to remove references to Monocle2 and Monocle3 (deprecated functions).

scop 0.6.1

  • feat:
    • PrepareEnv(): Improved message formatting and simplified log output for better user experience.
    • Added get_conda_envs_dir() helper function to centralize conda environment directory retrieval.
    • integration_scop(): Enhanced integration_method parameter definition with explicit method list for better code clarity.
  • fix:
    • Moved exist_python_pkgs() function to check_package.R for better code organization.
    • Replaced direct conda_info()$envs_dirs[1] calls with get_conda_envs_dir() helper function for consistency.
    • RunSCExplorer(): Updated to use thisplot::palette_list and thisplot::slim_data() instead of scop::palette_list and scop::slim_data().
    • Added thisplot to dependency checks in RunSCExplorer().
  • docs:
    • Updated documentation across multiple functions.

scop 0.6.0

  • feat:
    • PrepareEnv(): Enhanced with environment caching mechanism to avoid redundant environment preparation. Improved message formatting and error handling.
    • Python-based functions (RunPAGA(), RunSCVELO(), RunPalantir(), RunCellRank(), RunWOT()) now automatically call PrepareEnv() internally, eliminating the need for users to manually prepare the Python environment before using these functions.
    • cluster_within_group2(): New function for clustering within groups.
    • Multiple plotting functions: Replaced geom_sankey() with ggsankey::geom_sankey() for better Sankey diagram support.
    • Multiple functions: Replaced ::: operator with get_namespace_fun() for safer namespace access.
  • fix:
    • Removed RunMonocle() function and related documentation (RunMonocle2.Rd, RunMonocle3.Rd).
    • Removed projection_functions.R file (functions moved to other locations).
    • Replaced custom theme functions with thisplot::theme_this() (exported as theme_scop()).
    • Replaced direct log_message() calls with thisutils::log_message() for consistency.
    • Removed palette_list data object.
  • deps:
    • Moved cli from Suggests to Imports for better message formatting support.
    • Added thisplot to Imports for theme and utility functions.
    • Added ggsankey to Suggests for Sankey diagram support.
    • Added remote dependencies: theislab/destiny, mengxu98/thisplot.
    • Removed unused dependencies: Biobase, BiocGenerics, concaveman, DDRTree, glmGamPoi, hexbin, monocle, png, ragg, tidyr.
  • docs:
    • Updated documentation across multiple functions to reflect code refactoring.
    • Improved code organization and maintainability.

scop 0.5.5

  • fix:
    • Fixed VelocityPlot() function error in plot_type = "grid" mode: replaced vectorized arrow length with fixed-length arrows (using mean length) to resolve vapply() error that occurred when grid::arrow() received a vector instead of a single value, see #72, #74.

scop 0.5.4

scop 0.5.3

  • feat:
    • PrepareDB(): Changed default Ensembl_version parameter from 103 to NULL for more flexible version handling.
    • Added Python version log_message() for Python-based functions (RunSCVELO(), RunPAGA(), RunPalantir(), RunCellRank(), RunWOT()) and added verbose parameter inheritance and improved message formatting using cli-style formatting.
  • fix:
    • Delete harmonizomeapi.py file.
    • Move scop_analysis.py into a single functions.py file in inst/python/ for better code organization and maintainability.
  • docs:
    • Improved parameter documentation consistency.

scop 0.5.1

  • docs:
    • Improved reference formatting and consistency across multiple functions.
    • Enhanced documentation clarity and readability.

scop 0.5.0

  • feat:
    • RunCellChat(): New function to perform CellChat analysis for investigating cell-to-cell communication with support for human, mouse, and zebrafish species.
    • CellChatPlot(): New function to visualize CellChat analysis results with various plot types and customization options.
    • Multiple integration functions: Improved error messages and message formatting for better user experience.
  • deps:
    • Added CellChat package dependency with remote repository jinworks/CellChat.
  • docs:
    • Updated README.md with improved code formatting and examples.
    • Enhanced documentation for cell communication analysis functions.
    • Improved error messages and user guidance across integration functions.
  • fix:
    • Removed some example figures to optimize package installation size.

scop 0.4.0

  • feat:
    • RunProportionTest(): New function to perform Monte-carlo permutation test for quantifying cell proportion differences between conditions.
    • ProportionTestPlot(): New function to generate proportion test plots with customizable significance thresholds and visualization options.
    • Multiple Python-based functions: add \dontrun{} blocks for Github workfolw checking.
  • docs:
    • Added comprehensive documentation for new proportion testing functions.
    • Enhanced example documentation across multiple functions.
    • Updated package documentation and examples.

scop 0.3.4

  • docs:
    • Updated workflow examples and function documentation.

scop 0.3.3

  • feat:
    • Multiple functions: Improved parameter documentation formatting and consistency across the package.

scop 0.3.2

  • feat:
    • GetFeaturesData() and AddFeaturesData(): Enhanced argument clarity, added input validation, and standardized return values for Seurat, Assay, and Assay5 objects.
    • CellCorHeatmap():
      • Renamed parameters: query_cell_annotationquery_annotation, ref_cell_annotationref_annotation.
      • Improved error message formatting using cli-style formatting.
      • Simplified variable assignments and improved readability.
  • docs:
    • Comprehensive documentation updates across multiple functions including AnnotateFeatures, CellDimPlot, CellStatPlot, FeatureStatPlot, GroupHeatmap, RunCellQC, and others.
    • Improved parameter descriptions and function clarity.

scop 0.3.1

  • feat:
    • EnrichmentPlot() and GSEAPlot(): Removed conditional font face styling (face = ifelse() logic) for better text rendering consistency. Set the default value of lineheight from 0.5 to 0.7.
    • Updated check_r() function for improved package checking functionality.
    • Updated reexports functionality.
  • docs:
    • Updated documentation formatting and consistency.

scop 0.3.0

  • feat:
    • Fixed segmentation faults and R crashes on M-series MacBook when running Python functions.
    • RunPAGA(): Enhanced with M-series MacBook detection and automatic environment configuration.
    • RunSCVELO(): Added ARM64-specific optimizations to prevent crashes and ensure stable execution.
    • RunCellRank(): Implemented M-series compatibility with proper NUMBA configuration.
    • RunPalantir(): Added ARM64 support with single-threaded execution mode.
    • RunWOT(): Enhanced with M-series MacBook environment variable settings.
    • RunTriMap(): Added M-series MacBook compatibility for dimensionality reduction.
    • RunPaCMAP(): Implemented ARM64-specific environment configuration.
    • RunPHATE(): Added M-series MacBook support for non-linear dimensionality reduction.
    • RunCellQC(): Enhanced both scrublet and doubletdetection functions with ARM64 compatibility.
  • docs:
    • Updated function documentation to reflect M-series MacBook compatibility.
    • Added technical notes about ARM64 architecture considerations.

scop 0.2.9

  • fix:
  • docs:
    • Updated documentation for some functions.

scop 0.2.7

  • feat:
    • Added an internal function .check_pkg_status() to check if an R package is installed.
    • Update function CheckDataType() to S4 class function.
    • Update function standard_scop(), make it more efficient.
  • data:
    • Delete lifemap data, including: lifemap_cell, lifemap_compartment and lifemap_organ.
    • Reconstructed the sample data for both panc8_sub and pancreas_sub, retaining only the basic Seurat object.

scop 0.2.6

  • feat:
    • Added remove_r() function for easy remove R packages.
    • Rename function: RemovePackages() to remove_python().
    • Removed other methods of installing R packages from the check_r() function, only retaining pak::pak.
    • Delete useless import packages: BBmisc, BiocManager, covr, devtools, promises and withr.
    • Optimize the structure of _pkgdown.yml file.
  • docs:
    • Updated documentation for some functions.

scop 0.2.5

  • feat:
    • Rename function: palette_scop() to palette_colors().

scop 0.2.4

  • feat:
    • Rename functions: check_srt_merge() to CheckDataMerge(), check_srt_list() to CheckDataList and check_data_type() to CheckDataType.

scop 0.2.2

scop 0.2.0

  • feat:
  • fix:
    • Corrected an issue in py_to_r2() function (intrinsic function), which ensures that Python-dependent functions like RunPAGA() and RunSCVELO() function run correctly.

scop 0.1.9

scop 0.1.5

scop 0.1.4

  • feat:
    • Update .onAttach(), now .onAttach() will print more information about conda and Python.
    • Update PrepareEnv() function for easy add or update a conda environments and install Python packages.
    • Added ListEnv() and RemoveEnv() functions for easy management of conda environment and Python packages.

scop 0.1.3

scop 0.0.9

  • fix:
    • Fix a bug for PrepareEnv() function.
    • The default Python version is now set to 3.10-1.

scop 0.0.6

scop 0.0.5

  • data:
    • Updated the pancreas_sub and panc8_sub test datasets to the Seurat v5 object format.

scop 0.0.1

  • Initial version