diff --git a/DESCRIPTION b/DESCRIPTION index 0fecef43..3868ce70 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,10 +1,11 @@ Package: SeuratObject Type: Package Title: Data Structures for Single Cell Data -Version: 5.0.1 +Version: 5.0.2 Authors@R: c( - person(given = 'Rahul', family = 'Satija', email = 'rsatija@nygenome.org', role = 'aut', comment = c(ORCID = '0000-0001-9448-8833')), - person(given = 'Paul', family = 'Hoffman', email = 'seurat@nygenome.org', role = c('aut', 'cre'), comment = c(ORCID = '0000-0002-7693-8957')), + person(given = 'Paul', family = 'Hoffman', email = 'hoff0792@alumni.umn.edu', role = 'aut', comment = c(ORCID = '0000-0002-7693-8957')), + person(given = 'Rahul', family = 'Satija', email = 'seurat@nygenome.org', role = c('aut', 'cre'), comment = c(ORCID = '0000-0001-9448-8833')), + person(given = 'David', family = 'Collins', email = 'dcollins@nygenome.org', role = 'aut', comment = c(ORCID = '0000-0001-9243-7821')), person(given = "Yuhan", family = "Hao", email = 'yhao@nygenome.org', role = 'aut', comment = c(ORCID = '0000-0002-1810-0822')), person(given = "Austin", family = "Hartman", email = 'ahartman@nygenome.org', role = 'aut', comment = c(ORCID = '0000-0001-7278-1852')), person(given = "Gesmira", family = "Molla", email = 'gmolla@nygenome.org', role = 'aut', comment = c(ORCID = '0000-0002-8628-5056')), @@ -29,24 +30,24 @@ Description: Defines S4 classes for single-cell genomic data and associated Hao Y, Hao S, et al (2021) and Hao Y, et al (2023) for more details. -URL: https://mojaveazure.github.io/seurat-object/, - https://github.com/mojaveazure/seurat-object -BugReports: https://github.com/mojaveazure/seurat-object/issues +URL: https://satijalab.github.io/seurat-object/, + https://github.com/satijalab/seurat-object +BugReports: https://github.com/satijalab/seurat-object/issues License: MIT + file LICENSE Encoding: UTF-8 LazyData: true -RoxygenNote: 7.2.3 +RoxygenNote: 7.3.1 Additional_repositories: https://bnprks.r-universe.dev Depends: - R (>= 4.0.0), + R (>= 4.1.0), sp (>= 1.5.0) Imports: future, future.apply, grDevices, grid, - Matrix (>= 1.6.3), + Matrix (>= 1.6.4), methods, progressr, Rcpp (>= 1.0.5), diff --git a/NAMESPACE b/NAMESPACE index 273adf81..a44a0b64 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -432,6 +432,7 @@ export(Degrees) export(Distances) export(Embeddings) export(EmptyDF) +export(EmptyMatrix) export(ExtractField) export(Features) export(FetchData) @@ -506,6 +507,7 @@ export(as.sparse) export(handlers) export(intersect) export(plan) +export(t) export(with_progress) exportClasses(Assay) exportClasses(Assay5) @@ -622,7 +624,6 @@ importFrom(sp,SpatialPolygons) importFrom(sp,bbox) importFrom(sp,coordinates) importFrom(sp,over) -importFrom(spam,t) importFrom(stats,aggregate) importFrom(stats,median) importFrom(stats,na.omit) diff --git a/NEWS.md b/NEWS.md index 3e7ada61..d33d5b18 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,17 @@ +# SeuratObject 5.0.2 + +## Changes: +- Properly re-export `%||%` from rlang (#178) +- Class key-based warnings (#180) +- Require R 4.1 (#180) +- Fix errors in `UpdateSeuratObject` (@ddiez, #182) +- Add `...` to call signature for `Radius` generic (#190) +- Fix bug in `PolyVtx` (#194) +- Fix bug in feature-level subsetting (#200) +- Update `UpdateSeuratObject` to run without `Seurat` installed (#199) +- Add warning in `Layers.Assay()` when the search returns no results (@maxim-h, #189) +- Fix bug in `subset` to allow empty images to be dropped (#204) + # SeuratObject 5.0.1 ## Changes: diff --git a/R/assay.R b/R/assay.R index c96de65f..23ff7684 100644 --- a/R/assay.R +++ b/R/assay.R @@ -697,6 +697,15 @@ Layers.Assay <- function(object, search = NA, ...) { if (!is_na(x = search)) { layers <- intersect(x = search, y = layers) if (length(x = layers) == 0) { + warning( + "Layer ", + search, + " isn't present in the assay ", + deparse(expr = substitute(expr = object)), + "; returning NULL", + call. = FALSE, + immediate. = TRUE + ) return(NULL) } } diff --git a/R/assay5.R b/R/assay5.R index 3f54cf6b..f5652219 100644 --- a/R/assay5.R +++ b/R/assay5.R @@ -2411,6 +2411,12 @@ subset.StdAssay <- function( for (lyr in setdiff(x = layers.all, y = layers)) { LayerData(object = x, layer = lyr) <- NULL } + # Subset feature-level metadata + mfeatures <- MatchCells( + new = Features(x = x, layer = NA), + orig = features, + ordered = TRUE + ) # Perform the subsets for (l in layers) { lcells <- MatchCells( @@ -2442,12 +2448,6 @@ subset.StdAssay <- function( for (i in c('cells', 'features')) { slot(object = x, name = i) <- droplevels(x = slot(object = x, name = i)) } - # Subset feature-level metadata - mfeatures <- MatchCells( - new = Features(x = x, layer = NA), - orig = features, - ordered = TRUE - ) slot(object = x, name = 'meta.data') <- slot( object = x, name = 'meta.data' diff --git a/R/centroids.R b/R/centroids.R index 4aab525c..0e176a66 100644 --- a/R/centroids.R +++ b/R/centroids.R @@ -192,7 +192,7 @@ GetTissueCoordinates.Centroids <- function(object, full = TRUE, ...) { #' @method Radius Centroids #' @export #' -Radius.Centroids <- function(object) { +Radius.Centroids <- function(object, ...) { return(slot(object = object, name = 'radius')) } diff --git a/R/fov.R b/R/fov.R index 9a64190f..9204ce14 100644 --- a/R/fov.R +++ b/R/fov.R @@ -904,13 +904,8 @@ setMethod( setMethod( f = 'initialize', signature = 'FOV', - definition = function(.Object, molecules, boundaries, assay, key, ...) { + definition = function(.Object, ...) { .Object <- callNextMethod(.Object, ...) - slot(object = .Object, name = 'molecules') <- molecules - slot(object = .Object, name = 'boundaries') <- boundaries - slot(object = .Object, name = 'assay') <- assay - slot(object = .Object, name = 'key') <- key - # Reorder cells in boundaries .Object <- .OrderCells(object = .Object) validObject(object = .Object) return(.Object) diff --git a/R/generics.R b/R/generics.R index f810b901..e3370544 100644 --- a/R/generics.R +++ b/R/generics.R @@ -997,6 +997,8 @@ IsGlobal <- function(object, ...) { #' #' @concept utils #' +#' @seealso \code{\link{EmptyMatrix}()} +#' #' @examples #' IsMatrixEmpty(new("matrix")) #' IsMatrixEmpty(matrix()) @@ -1273,6 +1275,7 @@ Project <- function(object, ...) { #' Get the spot radius from an image #' #' @param object An image object +#' @param ... Arguments passed to other methods #' #' @return The radius size #' @@ -1281,7 +1284,7 @@ Project <- function(object, ...) { #' #' @concept spatialimage #' -Radius <- function(object) { +Radius <- function(object, ...) { UseMethod(generic = 'Radius', object = object) } diff --git a/R/keymixin.R b/R/keymixin.R index fb185520..ff05c374 100644 --- a/R/keymixin.R +++ b/R/keymixin.R @@ -43,9 +43,7 @@ setClass( #' #' @family key #' -.KeyPattern <- function() { - return('^[a-zA-Z][a-zA-Z0-9]*_$') -} +.KeyPattern <- \() '^[a-zA-Z][a-zA-Z0-9]*_$' #' Generate a Random Key #' @@ -63,24 +61,22 @@ setClass( #' set.seed(42L) #' .RandomKey() #' -.RandomKey <- function(length = 7L, ...) { - return(Key( - object = RandomName( - length = length, - chars = c(letters, LETTERS, seq.int(from = 0L, to = 9L)), - ... - ), - quiet = TRUE - )) -} +.RandomKey <- \(length = 7L, ...) Key( + object = RandomName( + length = length, + chars = c(letters, LETTERS, seq.int(from = 0L, to = 9L)), + ... + ), + quiet = TRUE +) #%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% # Methods for Seurat-defined generics #%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% #' @param object An object -#' @param quiet Suppress warnings when updating characters to keys #' @param ... Ignored +#' @param quiet Suppress warnings when updating characters to keys #' @param value A key to set #' #' @details \code{Key.character}: Update a character to a key @@ -91,10 +87,14 @@ setClass( #' @method Key character #' @export #' -Key.character <- function(object, quiet = FALSE, ...) { - f <- ifelse(test = isTRUE(x = quiet), yes = suppressWarnings, no = identity) - return(f(UpdateKey(key = object))) -} +Key.character <- \(object, ..., quiet = FALSE) withCallingHandlers( + expr = UpdateKey(key = object), + updatedKeyWarning = \(cnd) tryInvokeRestart(r = ifelse( + test = isTRUE(x = quiet), + yes = 'muffleWarning', + no = RandomName() + )) +) #' @details \code{Key.KeyMixin}: Get the key of a keyed object #' @@ -130,9 +130,7 @@ Key.KeyMixin <- function(object, ...) { #' @method Key NULL #' @export #' -Key.NULL <- function(object, ...) { - return(NULL) -} +Key.NULL <- \(object, ...) NULL #%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% # Methods for R-defined generics @@ -142,6 +140,57 @@ Key.NULL <- function(object, ...) { # Internal #%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +#' Check Usage of Existing Keys +#' +#' Check key usage against existing keys to ensure key uniqueness +#' +#' @param key Existing key to check usage of; if missing, creates a +#' key from \code{name} +#' @param existing A vector of existing keys to match against \code{key} +#' @param name Name of object that \code{key} is used for; if provided and +#' \code{existing} is named, the entry of \code{existing} for \code{name} is +#' removed from the check +#' +#' @return A key guaranteed to be unique in the context of \code{existing} +#' +#' @keywords internal +#' +#' @noRd +#' +.CheckKey <- function(key, existing = NULL, name = NULL) { + if (rlang::is_missing(x = key) || !length(x = key) || !nzchar(x = key)) { + key <- Key(object = tolower(name) %||% RandomName(), quiet = TRUE) + } + key <- Key(object = key, quiet = TRUE) + if (!is.null(x = names(x = existing)) && !is.null(x = name)) { + existing <- existing[setdiff(x = names(x = existing), y = name)] + } + if (key %in% existing) { + old <- key + key <- Key(object = tolower(x = name %||% RandomName()), quiet = TRUE) + i <- 1L + n <- 5L + while (key %in% existing) { + key <- Key(object = RandomName(length = n), quiet = TRUE) + i <- i + 1L + if (!i %% 7L) { + n <- n + 2L + } + } + warn( + message = paste( + "Key", + sQuote(x = old), + "taken, using", + sQuote(x = key), + "instead" + ), + class = 'existingKeyWarning' + ) + } + return(key) +} + #' Internal Key Methods #' #' Internal key methods for classes that inherit from \code{\link{KeyMixin}}; @@ -199,18 +248,21 @@ UpdateKey <- function(key) { if (new.key == '_') { new.key <- paste0(RandomName(length = 3), '_') } - warning( - key.msg, - ", setting key from ", - key, - " to ", - new.key, - call. = FALSE, - immediate. = TRUE + warn( + message = paste0( + key.msg, + ", setting key from ", + key, + " to ", + new.key + ), + class = 'updatedKeyWarning' ) return(new.key) } +.MetaKey <- Key(object = 'md', quiet = TRUE) + #%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% # S4 methods #%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -224,7 +276,7 @@ UpdateKey <- function(key) { #' Keys must be a one-length character vector; a key must be composed of one #' of the following: #' \itemize{ -#' \item An empty string (eg. \dQuote{\code{''}}) where \code{nzchar() == 0} +#' \item An empty string (eg. \dQuote{\code{''}}) where \code{nchar() == 0} #' \item An string composed of one or more alphanumeric values #' (both lower- and upper-case) that ends with an underscore #' (\dQuote{\code{_}}); the first character must be a letter @@ -262,42 +314,10 @@ setValidity( # Ensure proper key composition valid <- c( valid, - paste0("Keys must match the pattern '", .KeyPattern(), "'") + paste("Keys must match the pattern", sQuote(x = .KeyPattern())) ) } } return(valid %||% TRUE) } ) - -.CheckKey <- function(key, existing = NULL, name = NULL) { - if (rlang::is_missing(x = key) || !length(x = key) || !nzchar(x = key)) { - key <- Key(object = tolower(name) %||% RandomName(), quiet = TRUE) - } - if (!is.null(x = names(x = existing)) && !is.null(x = name)) { - existing <- existing[setdiff(x = names(x = existing), y = name)] - } - if (key %in% existing) { - old <- key - key <- Key(object = tolower(x = name %||% RandomName()), quiet = TRUE) - i <- 1L - n <- 5L - while (key %in% existing) { - key <- Key(object = RandomName(length = n), quiet = TRUE) - i <- i + 1L - if (!i %% 7L) { - n <- n + 2L - } - } - warn( - message = paste( - "Key", - sQuote(x = old), - "taken, using", - sQuote(x = key), - "instead" - ) - ) - } - return(key) -} diff --git a/R/layers.R b/R/layers.R index 7cccf025..0f5b95af 100644 --- a/R/layers.R +++ b/R/layers.R @@ -242,7 +242,6 @@ setMethod( } ) -#' @importFrom Matrix t #' @importClassesFrom Matrix Matrix #' setMethod( @@ -260,7 +259,6 @@ setMethod( } ) -#' @importFrom spam t #' @importClassesFrom spam spam #' setMethod( @@ -336,7 +334,6 @@ setMethod( } ) -#' @importFrom Matrix t #' @importClassesFrom Matrix Matrix #' setMethod( @@ -361,7 +358,6 @@ setMethod( } ) -#' @importFrom spam t #' @importClassesFrom spam spam #' setMethod( diff --git a/R/seurat.R b/R/seurat.R index 452ca8ff..7664a29d 100644 --- a/R/seurat.R +++ b/R/seurat.R @@ -1104,7 +1104,7 @@ UpdateSeuratObject <- function(object) { ) } # Update object version - slot(object = object, name = 'version') <- packageVersion(pkg = 'Seurat') + slot(object = object, name = 'version') <- packageVersion(pkg = 'SeuratObject') } object <- suppressWarnings( expr = UpdateSlots(object = object), @@ -2124,15 +2124,13 @@ Key.Seurat <- function(object, ...) { CheckDots(...) object <- UpdateSlots(object = object) return(c( - meta.data = Key(object = 'md', quiet = TRUE), + meta.data = .MetaKey, vapply( X = .FilterObjects( object = object, - classes.keep = c('Assay', 'SpatialImage', 'KeyMixin') + classes.keep = c('SpatialImage', 'KeyMixin') ), - FUN = function(x) { - return(Key(object = object[[x]])) - }, + FUN = \(x) Key(object = object[[x]]), FUN.VALUE = character(length = 1L), USE.NAMES = TRUE ) @@ -3789,7 +3787,13 @@ subset.Seurat <- function( # } # subset images for (image in Images(object = x)) { - x[[image]] <- base::subset(x = x[[image]], cells = cells) + cells.from.image <- cells[cells %in% Cells(x[[image]])] + if (length(cells.from.image) == 0) { + image.subset <- NULL + } else { + image.subset <- base::subset(x = x[[image]], cells = cells.from.image) + } + x[[image]] <- image.subset } return(x) } @@ -5874,6 +5878,7 @@ UpdateDimReduction <- function(old.dr, assay) { cell.embeddings = as(object = cell.embeddings, Class = 'matrix'), feature.loadings = as(object = feature.loadings, Class = 'matrix'), assay.used = assay, + global = FALSE, stdev = as(object = stdev, Class = 'numeric'), key = as(object = new.key, Class = 'character'), jackstraw = new.jackstraw, diff --git a/R/spatial.R b/R/spatial.R index 3baf1333..3cc01b00 100644 --- a/R/spatial.R +++ b/R/spatial.R @@ -257,7 +257,7 @@ Key.SpatialImage <- function(object, ...) { #' @method Radius SpatialImage #' @export #' -Radius.SpatialImage <- function(object) { +Radius.SpatialImage <- function(object, ...) { return(NULL) } diff --git a/R/utils.R b/R/utils.R index b9f61f70..320b1ebf 100644 --- a/R/utils.R +++ b/R/utils.R @@ -19,14 +19,14 @@ NULL #' #' Set a default value depending on if an object is \code{NULL} #' +#' @usage x \%||\% y +#' #' @param x An object to test #' @param y A default value #' #' @return For \code{\%||\%}: \code{y} if \code{x} is \code{NULL}; #' otherwise \code{x} #' -#' @importFrom rlang %||% -#' #' @name set-if-null #' @rdname set-if-null #' @@ -34,7 +34,7 @@ NULL #' #' @seealso \code{\link[rlang:op-null-default]{rlang::\%||\%}} #' -#' @export +#' @aliases %||% #' #' @concept utils #' @@ -43,7 +43,14 @@ NULL #' 1 %||% 2 #' NULL %||% 2 #' -`%||%` <- rlang::`%||%` +NULL + +#' @importFrom rlang %||% +#' @export +#' +#' @noRd +#' +rlang::`%||%` #' @rdname set-if-null #' @@ -1095,6 +1102,70 @@ EmptyDF <- function(n) { return(as.data.frame(x = matrix(nrow = n, ncol = 0L))) } +#' Empty Matrices +#' +#' Create empty 0x0 matrices of varying types +#' +#' @param repr Representation of empty matrix; choose from: +#' \itemize{ +#' \item \dQuote{\code{C}} for a +#' \code{\link[Matrix:CsparseMatrix-class]{CsparseMatrix}} +#' \item \dQuote{\code{T}} for a +#' \code{\link[Matrix:TsparseMatrix-class]{TsparseMatrix}} +#' \item \dQuote{\code{R}} for an +#' \code{\link[Matrix:RsparseMatrix-class]{RsparseMatrix}} +#' \item \dQuote{\code{e}} for an +#' \code{\link[Matrix:unpackedMatrix-class]{unpackedMatrix}} +#' \item \dQuote{\code{d}} for a dense S3 \code{\link[base]{matrix}} +#' \item \dQuote{\code{spam}} for a \code{\link[spam]{spam}} matrix +#' } +#' @param type Type of resulting matrix to return, choose from: +#' \itemize{ +#' \item \dQuote{\code{d}} for numeric matrices +#' \item \dQuote{\code{l}} for logical matrices +#' \item \dQuote{\code{n}} for pattern matrices +#' } +#' Note, when \code{repr} is \dQuote{\code{spam}}, \code{type} must be +#' \dQuote{\code{d}}; when \code{repr} is \dQuote{\code{d}}, setting \code{type} +#' to \dQuote{\code{n}} returns a logical matrix +#' +#' @return A 0x0 matrix of the specified representation and type +#' +#' @export +#' +#' @concept utils +#' +#' @seealso \code{\link{IsMatrixEmpty}()} +#' +#' @examples +#' EmptyMatrix() +#' EmptyMatrix("spam") +#' +EmptyMatrix <- function(repr = 'C', type = 'd' ) { + repr <- arg_match(arg = repr, values = c('C', 'T', 'R', 'e', 'd', 'spam')) + type <- arg_match( + arg = type, + values = switch( + EXPR = repr, + spam = 'd', + c('d', 'l', 'n') + ) + ) + return(switch( + EXPR = repr, + spam = spam::spam(x = 0L, nrow = 0L, ncol = 0L), + d = matrix( + data = vector( + mode = switch(EXPR = type, d = 'numeric', 'logical'), + length = 0L + ), + nrow = 0L, + ncol = 0L + ), + new(Class = paste0(type, 'g', repr, 'Matrix')) + )) +} + #' Extract delimiter information from a string. #' #' Parses a string (usually a cell name) and extracts fields based @@ -1320,8 +1391,7 @@ PackageCheck <- function(..., error = TRUE) { #' @references \url{https://stackoverflow.com/questions/3436453/calculate-coordinates-of-a-regular-polygons-vertices} #' #' @examples -#' coords <- PolyVtx(5, t1 = 90) -#' coords +#' (coords <- PolyVtx(5, t1 = 90)) #' if (requireNamespace("ggplot2", quietly = TRUE)) { #' ggplot2::ggplot(coords, ggplot2::aes(x = x, y = y)) + ggplot2::geom_polygon() #' } @@ -1332,10 +1402,16 @@ PolyVtx <- function(n, r = 1L, xc = 0L, yc = 0L, t1 = 0) { } else if (n < 3L) { abort(message = "'n' must be greater than or equal to 3") } - stopifnot(is_bare_integerish(x = r, n = 1L, finite = TRUE)) - stopifnot(is_bare_integerish(x = xc, n = 1L, finite = TRUE)) - stopifnot(is_bare_integerish(x = yc, n = 1L, finite = TRUE)) - stopifnot(is_bare_numeric(x = t1, n = 1L)) + stopifnot( + "'r' must be a single, finite number" = is_bare_numeric(x = r, n = 1L) && + is.finite(x = r), + "'xc' must be a single, finite number" = is_bare_numeric(x = xc, n = 1L) && + is.finite(x = xc), + "'yc' must be a single, finite number" = is_bare_numeric(x = yc, n = 1L) && + is.finite(x = yc), + "'t1' must be a single, finite number" = is_bare_numeric(x = t1, n = 1L) && + is.finite(x = t1) + ) t1 <- Radians(deg = t1) coords <- matrix(data = 0, nrow = n, ncol = 2) colnames(x = coords) <- c('x', 'y') @@ -2175,6 +2251,11 @@ StitchMatrix.matrix <- function(x, y, rowmap, colmap, ...) { # Methods for R-defined generics #%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +#' @method t spam +#' @export +#' +t.spam <- spam::t + #%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% # S4 methods #%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/R/zzz.R b/R/zzz.R index 6e3ac80e..a88a9adb 100644 --- a/R/zzz.R +++ b/R/zzz.R @@ -115,6 +115,13 @@ generics::intersect # #' # Matrix::colMeans +#' @importFrom Matrix t +#' @export +#' +#' @noRd +#' +Matrix::t + #' @importFrom progressr handlers #' @export #' diff --git a/cran-comments.md b/cran-comments.md index 9011be8c..85008bc9 100644 --- a/cran-comments.md +++ b/cran-comments.md @@ -1,10 +1,12 @@ -# SeuratObject v5.0.1 +# SeuratObject v5.0.2 ## Test environments -* local ubuntu 22.04 install, R 4.2.3 -* win-builder (oldrelease, release) +* local ubuntu 20.04 install, R 4.3.2 +* local macOS 14.1, R 4.4.0 +* win-builder (oldrelease, release, devel) +* mac-builder (devel) -We were unable to test on r-devel on win-builder due to insufficient Matrix version +We were unable to test on r-release on mac-builder because the portal seemed to point to the wrong version. ## R CMD check results @@ -13,19 +15,27 @@ There were no ERRORs or WARNINGs There were two NOTEs > * checking CRAN incoming feasibility ... NOTE +> Maintainer: 'Rahul Satija ' +> +> New maintainer: +> Rahul Satija +> Old maintainer(s): +> Paul Hoffman > Suggests or Enhances not in mainstream repositories: > BPCells > Availability using Additional_repositories specification: > BPCells yes https://bnprks.r-universe.dev +The new maintainer is Rahul Satija, the email address has remained the same. + > * checking package dependencies ... NOTE > Package suggested but not available for checking: 'BPCells' -BPCells is hosted on R-universe and used conditionally in SeuratObject +BPCells is hosted on R-universe and used conditionally in SeuratObject. ## Downstream dependencies +There are 2 packages that depend on SeuratObject: Seurat, and tidyseurat; this update does not impact their functionality. -The following reverse dependency is impacted by this release of SeuratObject: +There are 9 packages that import SeuratObject: APackOfTheClones, bbknnR, CAMML, Platypus, scAnnotate, scaper, scCustomize, scpoisson, and Signac; this update does not impact their functionality. -- tidyseurat - - test failures: SeuratObject changes the order of the results, but not the actual values. The authors of tidyseurat are aware of this, but the functionality of tidyseurat is not impacted +There are 10 packages that suggest SeuratObject: cellpypes, CytoSimplex, RESET, rliger, scOntoMatch, SCpubr, singleCellHaystack, SpaTopic, SPECK, and VAM; this update does not impact their functionality. diff --git a/man/Assay-validity.Rd b/man/Assay-validity.Rd index f3c67835..7c58dd4b 100644 --- a/man/Assay-validity.Rd +++ b/man/Assay-validity.Rd @@ -37,7 +37,7 @@ blah Keys must be a one-length character vector; a key must be composed of one of the following: \itemize{ - \item An empty string (eg. \dQuote{\code{''}}) where \code{nzchar() == 0} + \item An empty string (eg. \dQuote{\code{''}}) where \code{nchar() == 0} \item An string composed of one or more alphanumeric values (both lower- and upper-case) that ends with an underscore (\dQuote{\code{_}}); the first character must be a letter diff --git a/man/Assay5-validity.Rd b/man/Assay5-validity.Rd index 9151beee..820a0276 100644 --- a/man/Assay5-validity.Rd +++ b/man/Assay5-validity.Rd @@ -17,7 +17,7 @@ blah Keys must be a one-length character vector; a key must be composed of one of the following: \itemize{ - \item An empty string (eg. \dQuote{\code{''}}) where \code{nzchar() == 0} + \item An empty string (eg. \dQuote{\code{''}}) where \code{nchar() == 0} \item An string composed of one or more alphanumeric values (both lower- and upper-case) that ends with an underscore (\dQuote{\code{_}}); the first character must be a letter diff --git a/man/Cells.Rd b/man/Cells.Rd index 2965862f..303afd43 100644 --- a/man/Cells.Rd +++ b/man/Cells.Rd @@ -50,8 +50,8 @@ Cells(x = pbmc_small) } \seealso{ -\code{\link{dimnames.Assay5}()}, \code{\link{dimnames.Assay}()}, +\code{\link{dimnames.Assay5}()}, \code{\link{dimnames.Seurat}()} } \concept{data-access} diff --git a/man/Centroids-methods.Rd b/man/Centroids-methods.Rd index 6c92285c..eb0a618f 100644 --- a/man/Centroids-methods.Rd +++ b/man/Centroids-methods.Rd @@ -21,7 +21,7 @@ \method{GetTissueCoordinates}{Centroids}(object, full = TRUE, ...) -\method{Radius}{Centroids}(object) +\method{Radius}{Centroids}(object, ...) \method{RenameCells}{Centroids}(object, new.names = NULL, ...) diff --git a/man/DimReduc-validity.Rd b/man/DimReduc-validity.Rd index 37fa89ab..9d13ca8b 100644 --- a/man/DimReduc-validity.Rd +++ b/man/DimReduc-validity.Rd @@ -31,7 +31,7 @@ blah Keys must be a one-length character vector; a key must be composed of one of the following: \itemize{ - \item An empty string (eg. \dQuote{\code{''}}) where \code{nzchar() == 0} + \item An empty string (eg. \dQuote{\code{''}}) where \code{nchar() == 0} \item An string composed of one or more alphanumeric values (both lower- and upper-case) that ends with an underscore (\dQuote{\code{_}}); the first character must be a letter diff --git a/man/EmptyMatrix.Rd b/man/EmptyMatrix.Rd new file mode 100644 index 00000000..470ac898 --- /dev/null +++ b/man/EmptyMatrix.Rd @@ -0,0 +1,48 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/utils.R +\name{EmptyMatrix} +\alias{EmptyMatrix} +\title{Empty Matrices} +\usage{ +EmptyMatrix(repr = "C", type = "d") +} +\arguments{ +\item{repr}{Representation of empty matrix; choose from: +\itemize{ + \item \dQuote{\code{C}} for a + \code{\link[Matrix:CsparseMatrix-class]{CsparseMatrix}} + \item \dQuote{\code{T}} for a + \code{\link[Matrix:TsparseMatrix-class]{TsparseMatrix}} + \item \dQuote{\code{R}} for an + \code{\link[Matrix:RsparseMatrix-class]{RsparseMatrix}} + \item \dQuote{\code{e}} for an + \code{\link[Matrix:unpackedMatrix-class]{unpackedMatrix}} + \item \dQuote{\code{d}} for a dense S3 \code{\link[base]{matrix}} + \item \dQuote{\code{spam}} for a \code{\link[spam]{spam}} matrix +}} + +\item{type}{Type of resulting matrix to return, choose from: +\itemize{ + \item \dQuote{\code{d}} for numeric matrices + \item \dQuote{\code{l}} for logical matrices + \item \dQuote{\code{n}} for pattern matrices +} +Note, when \code{repr} is \dQuote{\code{spam}}, \code{type} must be +\dQuote{\code{d}}; when \code{repr} is \dQuote{\code{d}}, setting \code{type} +to \dQuote{\code{n}} returns a logical matrix} +} +\value{ +A 0x0 matrix of the specified representation and type +} +\description{ +Create empty 0x0 matrices of varying types +} +\examples{ +EmptyMatrix() +EmptyMatrix("spam") + +} +\seealso{ +\code{\link{IsMatrixEmpty}()} +} +\concept{utils} diff --git a/man/FOV-methods.Rd b/man/FOV-methods.Rd index 48d90a76..2adbf226 100644 --- a/man/FOV-methods.Rd +++ b/man/FOV-methods.Rd @@ -49,7 +49,7 @@ \S4method{[[}{FOV,character,missing,Molecules}(x, i, j, ...) <- value -\S4method{[[}{FOV,character,missing,`NULL`}(x, i, j, ...) <- value +\S4method{[[}{FOV,character,missing,NULL}(x, i, j, ...) <- value \S4method{[[}{FOV,character,missing,Segmentation}(x, i, j, ...) <- value diff --git a/man/IsMatrixEmpty.Rd b/man/IsMatrixEmpty.Rd index f88f8e26..66f06099 100644 --- a/man/IsMatrixEmpty.Rd +++ b/man/IsMatrixEmpty.Rd @@ -23,5 +23,8 @@ IsMatrixEmpty(new("matrix")) IsMatrixEmpty(matrix()) IsMatrixEmpty(matrix(1:3)) +} +\seealso{ +\code{\link{EmptyMatrix}()} } \concept{utils} diff --git a/man/Key-validity.Rd b/man/Key-validity.Rd index 19397e7c..53040c46 100644 --- a/man/Key-validity.Rd +++ b/man/Key-validity.Rd @@ -12,7 +12,7 @@ Validation of \code{\link{KeyMixin}} objects is handled by Keys must be a one-length character vector; a key must be composed of one of the following: \itemize{ - \item An empty string (eg. \dQuote{\code{''}}) where \code{nzchar() == 0} + \item An empty string (eg. \dQuote{\code{''}}) where \code{nchar() == 0} \item An string composed of one or more alphanumeric values (both lower- and upper-case) that ends with an underscore (\dQuote{\code{_}}); the first character must be a letter diff --git a/man/KeyMixin-class.Rd b/man/KeyMixin-class.Rd index 7a966699..e79a07b3 100644 --- a/man/KeyMixin-class.Rd +++ b/man/KeyMixin-class.Rd @@ -9,7 +9,7 @@ \alias{Key<-.KeyMixin} \title{A Mixin for Keyed objects} \usage{ -\method{Key}{character}(object, quiet = FALSE, ...) +\method{Key}{character}(object, ..., quiet = FALSE) \method{Key}{KeyMixin}(object, ...) @@ -18,10 +18,10 @@ \arguments{ \item{object}{An object} -\item{quiet}{Suppress warnings when updating characters to keys} - \item{...}{Ignored} +\item{quiet}{Suppress warnings when updating characters to keys} + \item{value}{A key to set} } \value{ diff --git a/man/LogMap-class.Rd b/man/LogMap-class.Rd index 29cdeeb6..2db0a027 100644 --- a/man/LogMap-class.Rd +++ b/man/LogMap-class.Rd @@ -19,13 +19,13 @@ LogMap(y) \S4method{[[}{LogMap,missing,missing}(x, i, j, ...) -\S4method{[[}{LogMap,`NULL`,missing}(x, i, j, ...) +\S4method{[[}{LogMap,NULL,missing}(x, i, j, ...) \S4method{[[}{LogMap,character,missing,character}(x, i, j, ...) <- value \S4method{[[}{LogMap,character,missing,integer}(x, i, j, ...) <- value -\S4method{[[}{LogMap,character,missing,`NULL`}(x, i, j, ...) <- value +\S4method{[[}{LogMap,character,missing,NULL}(x, i, j, ...) <- value \S4method{[[}{LogMap,character,missing,numeric}(x, i, j, ...) <- value } diff --git a/man/PolyVtx.Rd b/man/PolyVtx.Rd index 1b2a1adb..f055430b 100644 --- a/man/PolyVtx.Rd +++ b/man/PolyVtx.Rd @@ -28,8 +28,7 @@ its radius (distance from center to vertex). Also permits transforming the resulting coordinates by moving the origin and altering the initial angle } \examples{ -coords <- PolyVtx(5, t1 = 90) -coords +(coords <- PolyVtx(5, t1 = 90)) if (requireNamespace("ggplot2", quietly = TRUE)) { ggplot2::ggplot(coords, ggplot2::aes(x = x, y = y)) + ggplot2::geom_polygon() } diff --git a/man/Radius.Rd b/man/Radius.Rd index 1a0f72df..dfc3e2a5 100644 --- a/man/Radius.Rd +++ b/man/Radius.Rd @@ -4,10 +4,12 @@ \alias{Radius} \title{Get the spot radius from an image} \usage{ -Radius(object) +Radius(object, ...) } \arguments{ \item{object}{An image object} + +\item{...}{Arguments passed to other methods} } \value{ The radius size diff --git a/man/Seurat-class.Rd b/man/Seurat-class.Rd index 8f3b9e5b..47a7afc6 100644 --- a/man/Seurat-class.Rd +++ b/man/Seurat-class.Rd @@ -56,8 +56,8 @@ Seurat object, validity, and interaction methods \code{\link{$.Seurat}()}, \code{\link{Seurat-validity}}, \code{\link{[[.Seurat}()}, -\code{\link{[[<-,Seurat,NULL}}, \code{\link{[[<-,Seurat}}, +\code{\link{[[<-,Seurat,NULL}}, \code{\link{dim.Seurat}()}, \code{\link{dimnames.Seurat}()}, \code{\link{merge.Seurat}()}, diff --git a/man/Seurat-validity.Rd b/man/Seurat-validity.Rd index 48d57875..83f1491b 100644 --- a/man/Seurat-validity.Rd +++ b/man/Seurat-validity.Rd @@ -14,8 +14,8 @@ Seurat object, validity, and interaction methods \code{\link{$.Seurat}()}, \code{\link{Seurat-class}}, \code{\link{[[.Seurat}()}, -\code{\link{[[<-,Seurat,NULL}}, \code{\link{[[<-,Seurat}}, +\code{\link{[[<-,Seurat,NULL}}, \code{\link{dim.Seurat}()}, \code{\link{dimnames.Seurat}()}, \code{\link{merge.Seurat}()}, diff --git a/man/SeuratObject-package.Rd b/man/SeuratObject-package.Rd index bf9cffd0..fbc9572e 100644 --- a/man/SeuratObject-package.Rd +++ b/man/SeuratObject-package.Rd @@ -11,18 +11,19 @@ Defines S4 classes for single-cell genomic data and associated information, such \seealso{ Useful links: \itemize{ - \item \url{https://mojaveazure.github.io/seurat-object/} - \item \url{https://github.com/mojaveazure/seurat-object} - \item Report bugs at \url{https://github.com/mojaveazure/seurat-object/issues} + \item \url{https://satijalab.github.io/seurat-object/} + \item \url{https://github.com/satijalab/seurat-object} + \item Report bugs at \url{https://github.com/satijalab/seurat-object/issues} } } \author{ -\strong{Maintainer}: Paul Hoffman \email{seurat@nygenome.org} (\href{https://orcid.org/0000-0002-7693-8957}{ORCID}) +\strong{Maintainer}: Rahul Satija \email{seurat@nygenome.org} (\href{https://orcid.org/0000-0001-9448-8833}{ORCID}) Authors: \itemize{ - \item Rahul Satija \email{rsatija@nygenome.org} (\href{https://orcid.org/0000-0001-9448-8833}{ORCID}) + \item Paul Hoffman \email{hoff0792@alumni.umn.edu} (\href{https://orcid.org/0000-0002-7693-8957}{ORCID}) + \item David Collins \email{dcollins@nygenome.org} (\href{https://orcid.org/0000-0001-9243-7821}{ORCID}) \item Yuhan Hao \email{yhao@nygenome.org} (\href{https://orcid.org/0000-0002-1810-0822}{ORCID}) \item Austin Hartman \email{ahartman@nygenome.org} (\href{https://orcid.org/0000-0001-7278-1852}{ORCID}) \item Gesmira Molla \email{gmolla@nygenome.org} (\href{https://orcid.org/0000-0002-8628-5056}{ORCID}) diff --git a/man/SpatialImage-methods.Rd b/man/SpatialImage-methods.Rd index 58328cc9..5faa37d4 100644 --- a/man/SpatialImage-methods.Rd +++ b/man/SpatialImage-methods.Rd @@ -34,7 +34,7 @@ \method{Key}{SpatialImage}(object, ...) <- value -\method{Radius}{SpatialImage}(object) +\method{Radius}{SpatialImage}(object, ...) \method{RenameCells}{SpatialImage}(object, new.names = NULL, ...) diff --git a/man/StdAssay-validity.Rd b/man/StdAssay-validity.Rd index 5300c112..1d33b162 100644 --- a/man/StdAssay-validity.Rd +++ b/man/StdAssay-validity.Rd @@ -17,7 +17,7 @@ blah Keys must be a one-length character vector; a key must be composed of one of the following: \itemize{ - \item An empty string (eg. \dQuote{\code{''}}) where \code{nzchar() == 0} + \item An empty string (eg. \dQuote{\code{''}}) where \code{nchar() == 0} \item An string composed of one or more alphanumeric values (both lower- and upper-case) that ends with an underscore (\dQuote{\code{_}}); the first character must be a letter diff --git a/man/as.matrix.LogMap.Rd b/man/as.matrix.LogMap.Rd index 8f5111d0..cb818580 100644 --- a/man/as.matrix.LogMap.Rd +++ b/man/as.matrix.LogMap.Rd @@ -29,8 +29,8 @@ class(mat) } \seealso{ Logical map objects, validity, and interaction methods: -\code{\link{LogMap-validity}}, \code{\link{LogMap}}, +\code{\link{LogMap-validity}}, \code{\link{droplevels.LogMap}()}, \code{\link{intersect.LogMap}()}, \code{\link{labels.LogMap}()} diff --git a/man/cash-.Seurat.Rd b/man/cash-.Seurat.Rd index f4926cc3..14731277 100644 --- a/man/cash-.Seurat.Rd +++ b/man/cash-.Seurat.Rd @@ -63,8 +63,8 @@ Seurat object, validity, and interaction methods \code{\link{Seurat-class}}, \code{\link{Seurat-validity}}, \code{\link{[[.Seurat}()}, -\code{\link{[[<-,Seurat,NULL}}, \code{\link{[[<-,Seurat}}, +\code{\link{[[<-,Seurat,NULL}}, \code{\link{dim.Seurat}()}, \code{\link{dimnames.Seurat}()}, \code{\link{merge.Seurat}()}, diff --git a/man/dim.Seurat.Rd b/man/dim.Seurat.Rd index 9d796442..123fcab0 100644 --- a/man/dim.Seurat.Rd +++ b/man/dim.Seurat.Rd @@ -30,8 +30,8 @@ Seurat object, validity, and interaction methods \code{\link{Seurat-class}}, \code{\link{Seurat-validity}}, \code{\link{[[.Seurat}()}, -\code{\link{[[<-,Seurat,NULL}}, \code{\link{[[<-,Seurat}}, +\code{\link{[[<-,Seurat,NULL}}, \code{\link{dimnames.Seurat}()}, \code{\link{merge.Seurat}()}, \code{\link{names.Seurat}()}, diff --git a/man/dimnames.Seurat.Rd b/man/dimnames.Seurat.Rd index b9e930df..5547027a 100644 --- a/man/dimnames.Seurat.Rd +++ b/man/dimnames.Seurat.Rd @@ -45,8 +45,8 @@ Seurat object, validity, and interaction methods \code{\link{Seurat-class}}, \code{\link{Seurat-validity}}, \code{\link{[[.Seurat}()}, -\code{\link{[[<-,Seurat,NULL}}, \code{\link{[[<-,Seurat}}, +\code{\link{[[<-,Seurat,NULL}}, \code{\link{dim.Seurat}()}, \code{\link{merge.Seurat}()}, \code{\link{names.Seurat}()}, @@ -54,8 +54,8 @@ Seurat object, validity, and interaction methods \code{\link{Cells}()}, -\code{\link{dimnames.Assay5}()}, -\code{\link{dimnames.Assay}()} +\code{\link{dimnames.Assay}()}, +\code{\link{dimnames.Assay5}()} } \concept{dimnames} \concept{seurat} diff --git a/man/droplevels.LogMap.Rd b/man/droplevels.LogMap.Rd index ba1f3042..e8a61287 100644 --- a/man/droplevels.LogMap.Rd +++ b/man/droplevels.LogMap.Rd @@ -31,8 +31,8 @@ map[[]] } \seealso{ Logical map objects, validity, and interaction methods: -\code{\link{LogMap-validity}}, \code{\link{LogMap}}, +\code{\link{LogMap-validity}}, \code{\link{as.matrix.LogMap}()}, \code{\link{intersect.LogMap}()}, \code{\link{labels.LogMap}()} diff --git a/man/intersect.LogMap.Rd b/man/intersect.LogMap.Rd index 6fa6dbc9..a70ccf1c 100644 --- a/man/intersect.LogMap.Rd +++ b/man/intersect.LogMap.Rd @@ -31,8 +31,8 @@ intersect(map) } \seealso{ Logical map objects, validity, and interaction methods: -\code{\link{LogMap-validity}}, \code{\link{LogMap}}, +\code{\link{LogMap-validity}}, \code{\link{as.matrix.LogMap}()}, \code{\link{droplevels.LogMap}()}, \code{\link{labels.LogMap}()} diff --git a/man/labels.LogMap.Rd b/man/labels.LogMap.Rd index 81283a8f..518cb457 100644 --- a/man/labels.LogMap.Rd +++ b/man/labels.LogMap.Rd @@ -51,8 +51,8 @@ labels(map, c('a', 'b', 'g')) } \seealso{ Logical map objects, validity, and interaction methods: -\code{\link{LogMap-validity}}, \code{\link{LogMap}}, +\code{\link{LogMap-validity}}, \code{\link{as.matrix.LogMap}()}, \code{\link{droplevels.LogMap}()}, \code{\link{intersect.LogMap}()} diff --git a/man/merge.Seurat.Rd b/man/merge.Seurat.Rd index 2ffa59a4..af7f3f6d 100644 --- a/man/merge.Seurat.Rd +++ b/man/merge.Seurat.Rd @@ -83,8 +83,8 @@ Seurat object, validity, and interaction methods \code{\link{Seurat-class}}, \code{\link{Seurat-validity}}, \code{\link{[[.Seurat}()}, -\code{\link{[[<-,Seurat,NULL}}, \code{\link{[[<-,Seurat}}, +\code{\link{[[<-,Seurat,NULL}}, \code{\link{dim.Seurat}()}, \code{\link{dimnames.Seurat}()}, \code{\link{names.Seurat}()}, diff --git a/man/names.Seurat.Rd b/man/names.Seurat.Rd index fd880162..86213ebb 100644 --- a/man/names.Seurat.Rd +++ b/man/names.Seurat.Rd @@ -31,8 +31,8 @@ Seurat object, validity, and interaction methods \code{\link{Seurat-class}}, \code{\link{Seurat-validity}}, \code{\link{[[.Seurat}()}, -\code{\link{[[<-,Seurat,NULL}}, \code{\link{[[<-,Seurat}}, +\code{\link{[[<-,Seurat,NULL}}, \code{\link{dim.Seurat}()}, \code{\link{dimnames.Seurat}()}, \code{\link{merge.Seurat}()}, diff --git a/man/sub-LogMap-method.Rd b/man/sub-LogMap-method.Rd index 8159e1a8..ab7a63c0 100644 --- a/man/sub-LogMap-method.Rd +++ b/man/sub-LogMap-method.Rd @@ -33,7 +33,7 @@ from \code{x}} \item{...}{Arguments passed to other methods} -\item{drop}{For matrices and arrays. If \code{TRUE} the result is +\item{drop}{relevant for matrices and arrays. If \code{TRUE} the result is coerced to the lowest possible dimension (see the examples). This only works for extracting elements, not for the replacement. See \code{\link[base]{drop}} for further details. diff --git a/man/sub-sub-.Seurat.Rd b/man/sub-sub-.Seurat.Rd index 9cb61fa7..073afe86 100644 --- a/man/sub-sub-.Seurat.Rd +++ b/man/sub-sub-.Seurat.Rd @@ -76,8 +76,8 @@ Seurat object, validity, and interaction methods \code{\link{$.Seurat}()}, \code{\link{Seurat-class}}, \code{\link{Seurat-validity}}, -\code{\link{[[<-,Seurat,NULL}}, \code{\link{[[<-,Seurat}}, +\code{\link{[[<-,Seurat,NULL}}, \code{\link{dim.Seurat}()}, \code{\link{dimnames.Seurat}()}, \code{\link{merge.Seurat}()}, diff --git a/man/sub-sub-.StdAssay.Rd b/man/sub-sub-.StdAssay.Rd index 90d09a4e..a25cdb23 100644 --- a/man/sub-sub-.StdAssay.Rd +++ b/man/sub-sub-.StdAssay.Rd @@ -25,13 +25,13 @@ \S4method{[[}{StdAssay,character,missing,factor}(x, i, j, ...) <- value -\S4method{[[}{StdAssay,character,missing,`NULL`}(x, i, j, ...) <- value +\S4method{[[}{StdAssay,character,missing,NULL}(x, i, j, ...) <- value \S4method{[[}{StdAssay,character,missing,vector}(x, i, j, ...) <- value \S4method{[[}{StdAssay,numeric,missing,ANY}(x, i, j, ...) <- value -\S4method{[[}{StdAssay,missing,missing,`NULL`}(x, i, j, ...) <- value +\S4method{[[}{StdAssay,missing,missing,NULL}(x, i, j, ...) <- value } \arguments{ \item{x}{An \code{\link{Assay5}} object} diff --git a/man/sub-subset-Seurat-NULL.Rd b/man/sub-subset-Seurat-NULL.Rd index 48c0a9bc..a1276c4a 100644 --- a/man/sub-subset-Seurat-NULL.Rd +++ b/man/sub-subset-Seurat-NULL.Rd @@ -8,7 +8,7 @@ \alias{[[<-,Seurat,character,missing,NULL-method} \title{Remove Subobjects and Cell-Level Meta Data} \usage{ -\S4method{[[}{Seurat,character,missing,`NULL`}(x, i, j, ...) <- value +\S4method{[[}{Seurat,character,missing,NULL}(x, i, j, ...) <- value } \arguments{ \item{x}{A \code{\link{Seurat}} object} diff --git a/man/subset.Seurat.Rd b/man/subset.Seurat.Rd index 765d3485..742d77c3 100644 --- a/man/subset.Seurat.Rd +++ b/man/subset.Seurat.Rd @@ -63,8 +63,8 @@ Seurat object, validity, and interaction methods \code{\link{Seurat-class}}, \code{\link{Seurat-validity}}, \code{\link{[[.Seurat}()}, -\code{\link{[[<-,Seurat,NULL}}, \code{\link{[[<-,Seurat}}, +\code{\link{[[<-,Seurat,NULL}}, \code{\link{dim.Seurat}()}, \code{\link{dimnames.Seurat}()}, \code{\link{merge.Seurat}()},