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.
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.
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.
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.
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.
Renamed RunDimReduction() to RunDimsReduction() and updated downstream callers/documentation accordingly.
standard_scop(): When linear_reduction_dims_use = NULL, now uses estimated dimensions stored in the reduction (via RunDimsEstimate()) when available, with fallback to the first 50 dimensions.
Added Coralysis_integrate() and exposed Coralysis through integration_scop(), following the official Seurat v5 compatible workflow via SingleCellExperiment.
Added h5ad_to_srt() for reading .h5ad files directly into Seurat objects via scanpy.read_h5ad(), with automatic CSR/float64 coercion to avoid reticulate conversion issues. Layers that fail conversion are gracefully skipped and reported.
adata_to_srt(): Improved robustness of layer conversion — each layer is now wrapped in tryCatch() so that individual failures no longer abort the entire conversion; skipped layers are reported as warnings.
RunCellChat(): Enhanced to support condition-specific analyses and pairwise merged comparisons via group_column and group_cmp parameters.
Added RunCellphoneDB() for running CellphoneDB cell-cell communication analysis on a Seurat object through the official Python package, with support for species conversion and results stored in srt@tools[["CellphoneDB"]].
Added RunNichenetr() and RunMultiNichenetr() for running NicheNet and MultiNicheNet analysis on Seurat objects with standardized result storage.
Added unified cell-cell communication plotting functions CCCStatPlot(), CCCHeatmap(), and CCCNetworkPlot() for CellChat, CellphoneDB, NicheNet, and MultiNicheNet results.
Remove CellChatPlot().
fix:
RunUMAP2(): Fixed reduction lookup to check existing reduction names before falling back to DefaultReduction(), avoiding errors when the exact reduction name is already present.
Added RunMetabolism() for single-cell metabolism pathway scoring with support for AUCell, GSVA, ssGSEA, and optional VISION, and MetabolismPlot() for visualization
RunMetabolism() now uses scMetabolism KEGG / Reactome metabolism pathway definitions to identify metabolism-related terms, then rebuilds pathway gene sets from updated PrepareDB() annotations, enabling cached database updates and cross-species metabolism scoring. Related issue #146 (@mengxu98).
Added RunDecontX() and integrated optional decontX ambient RNA decontamination into RunCellQC(), including contamination metadata, optional decontaminated assay output, and threshold-based QC filtering. Related issue #147 (@mengxu98).
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.
ListDB(): Now supports multiple species in the species parameter simultaneously and adds Species and DB columns to the output data frame for clearer identification.
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.
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".
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().
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:
RunPalantir(): Fixed unused plot_format parameter error. The parameter is now properly excluded from arguments passed to Python functions. Relate issue #126 (@christinejay990202-dev).
scop 0.8.1
fix:
FeatureHeatmap(): Fixed group_palcolor when a named vector is passed: the function previously used only the first color for all groups because group_palcolor[[1]] on a vector returns a single element. Now when group.by has length 1, a vector is automatically wrapped as a list; when within_groups = TRUE, group_palcolor is expanded in line with group_palette.
GroupHeatmap(): Same group_palcolor fix as FeatureHeatmap(): support for named-vector input and correct expansion when within_groups = TRUE.
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
docs:
Optimized @inheritParams usage to reduce redundant parameter definitions.
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.
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.
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.
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.
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.
Fixed SingleCellExperiment object creation in RunScmap() and RunSingleR() functions: changed from coercing SummarizedExperiment to directly constructing SingleCellExperiment objects.
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.
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.
Added remove_python() function for easy remove Python packages.
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
feat:
Update CellScoring() and AddModuleScore2() functions. Now, new parameters cores and verbose have been added.