diff --git a/NAMESPACE b/NAMESPACE index cc67cab..4c077c9 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -8,8 +8,6 @@ export("imgSource<-") export("molecules<-") export("spatialCoords<-") export("spatialCoordsNames<-") -export("spatialData<-") -export("spatialDataNames<-") export(SpatialExperiment) export(SpatialImage) export(addImg) @@ -30,8 +28,6 @@ export(rotateObject) export(scaleFactors) export(spatialCoords) export(spatialCoordsNames) -export(spatialData) -export(spatialDataNames) export(toSpatialExperiment) exportClasses(LoadedSpatialImage) exportClasses(RemoteSpatialImage) @@ -47,8 +43,6 @@ exportMethods("imgSource<-") exportMethods("molecules<-") exportMethods("spatialCoords<-") exportMethods("spatialCoordsNames<-") -exportMethods("spatialData<-") -exportMethods("spatialDataNames<-") exportMethods(addImg) exportMethods(dim) exportMethods(getImg) @@ -66,16 +60,12 @@ exportMethods(rotateObject) exportMethods(scaleFactors) exportMethods(spatialCoords) exportMethods(spatialCoordsNames) -exportMethods(spatialData) -exportMethods(spatialDataNames) importClassesFrom(S4Vectors,Annotated) importFrom(BiocGenerics,cbind) importFrom(BiocGenerics,rbind) importFrom(S4Vectors,DataFrame) importFrom(S4Vectors,coolcat) importFrom(S4Vectors,isEmpty) -importFrom(S4Vectors,make_zero_col_DFrame) -importFrom(S4Vectors,metadata) importFrom(S4Vectors,setValidity2) importFrom(SingleCellExperiment,"int_colData<-") importFrom(SingleCellExperiment,"int_metadata<-") diff --git a/R/AllGenerics.R b/R/AllGenerics.R index b4d9cbc..7ad475f 100644 --- a/R/AllGenerics.R +++ b/R/AllGenerics.R @@ -35,18 +35,6 @@ setGeneric("mirrorImg", function(x, ...) standardGeneric("mirrorImg")) # SpatialExperiment methods ---------------------------------------------------- -#' @export -setGeneric("spatialData", function(x, ...) standardGeneric("spatialData")) - -#' @export -setGeneric("spatialData<-", function(x, value) standardGeneric("spatialData<-")) - -#' @export -setGeneric("spatialDataNames", function(x) standardGeneric("spatialDataNames")) - -#' @export -setGeneric("spatialDataNames<-", function(x, value) standardGeneric("spatialDataNames<-")) - #' @export setGeneric("spatialCoords", function(x, ...) standardGeneric("spatialCoords")) diff --git a/R/SpatialExperiment-colData.R b/R/SpatialExperiment-colData.R index b13939f..d0928f6 100644 --- a/R/SpatialExperiment-colData.R +++ b/R/SpatialExperiment-colData.R @@ -99,7 +99,6 @@ setReplaceMethod("colData", setReplaceMethod("colData", c("SpatialExperiment", "NULL"), function(x, value) { - spatialDataNames(x) <- NULL value <- colData(x)["sample_id"] colData(x) <- value return(x) diff --git a/R/SpatialExperiment-methods.R b/R/SpatialExperiment-methods.R index a47d3ac..acdcc8d 100644 --- a/R/SpatialExperiment-methods.R +++ b/R/SpatialExperiment-methods.R @@ -3,8 +3,6 @@ #' @title Methods for spatial attributes #' #' @aliases -#' spatialData spatialData<- -#' spatialDataNames spatialDataNames<- #' spatialCoords spatialCoords<- #' spatialCoordsNames spatialCoordsNames<- #' imgData imgData<- @@ -28,39 +26,21 @@ #' @details #' Additional details for each type of data attribute are provided below. #' -#' Note: \code{\link{spatialData}} and \code{\link{spatialDataNames}} -#' (previously used to store a subset of columns from \code{\link{colData}}) -#' have been deprecated. All columns should be stored in either -#' \code{\link{spatialCoords}} (numeric matrix containing spatial coordinates) -#' or \code{\link{colData}} (all other columns). The -#' \code{spatialData}/\code{spatialDataNames} functionality has been retained -#' for backward compatibility but may be removed in the future. -#' #' See \code{\link{rotateCoords}}, \code{\link{mirrorCoords}}, #' \code{\link{rotateObject}}, or \code{\link{mirrorObject}} for details on #' methods to rotate and mirror SpatialExperiment objects and their #' \code{spatialCoords}. #' -#' @section spatialData and spatialCoords methods: +#' @section spatialCoords methods: #' \describe{ -#' \item{\code{spatialData(x) <- value}: }{ -#' The \code{spatialData} setter expects a \code{DataFrame}. -#' If the input does not contain an \code{in_tissue} column, -#' this will be included with a default value of \code{1}.} #' \item{\code{spatialCoords(x)}: }{ #' Getter for numeric matrix of spatial coordinates.} #' \item{\code{spatialCoords(x) <- value}: }{ #' Setter for numeric matrix of spatial coordinates.} #' } #' -#' @section spatialDataNames and spatialCoordsNames methods: +#' @section spatialCoordsNames methods: #' \describe{ -#' \item{\code{spatialDataNames(x)}: }{ -#' Returns the names of the \code{colData} associated with the -#' spatial information, which are stored in the \code{int_metadata}.} -#' \item{\code{spatialDataNames(x) <- value}: }{ -#' Setter to replace column names -#' in the \code{spatialData} \code{DataFrame}.} #' \item{\code{spatialCoordsNames(x)}: }{ #' Returns the defined names of the #' spatial coordinates (e.g. \code{c("x", "y")}).} @@ -110,86 +90,6 @@ #' sample_id = cd$sample_id) NULL -# spatialData ------------------------------------------------------------------ - -#' @rdname SpatialExperiment-methods -#' @importFrom SummarizedExperiment colData -#' @export -setMethod("spatialData", - "SpatialExperiment", - function(x) { - colData(x)[spatialDataNames(x)] - } -) - -#' @rdname SpatialExperiment-methods -#' @importFrom SummarizedExperiment colData colData<- -#' @export -setReplaceMethod("spatialData", - c("SpatialExperiment", "DFrame"), - function(x, value) { - stopifnot(nrow(value) == ncol(x)) - out <- colData(x) - old <- names(out) - new <- names(value) - dup <- intersect(old, new) - if (length(dup) > 0) { - out[dup] <- value - value <- value[setdiff(new, dup)] - } - out <- cbind(out, value) - colData(x) <- out - spatialDataNames(x) <- new - return(x) - } -) - -#' @rdname SpatialExperiment-methods -#' @importFrom S4Vectors make_zero_col_DFrame -#' @export -setReplaceMethod("spatialData", - c("SpatialExperiment", "NULL"), - function(x, value) { - `spatialDataNames<-`(x, value) - } -) - -# spatialDataNames ------------------------------------------------------------- - -#' @rdname SpatialExperiment-methods -#' @importFrom S4Vectors metadata -#' @export -setMethod("spatialDataNames", - "SpatialExperiment", - function(x) { - .msg_spatialData() - int_metadata(x)$spatialDataNames - } -) - -#' @rdname SpatialExperiment-methods -#' @importFrom SummarizedExperiment colData -#' @importFrom SingleCellExperiment int_metadata<- -#' @export -setReplaceMethod("spatialDataNames", - c("SpatialExperiment", "character"), - function(x, value) { - stopifnot(value %in% names(colData(x))) - int_metadata(x)$spatialDataNames <- value - return(x) - } -) - -#' @rdname SpatialExperiment-methods -#' @export -setReplaceMethod("spatialDataNames", - c("SpatialExperiment", "NULL"), - function(x, value) { - value <- character() - `spatialDataNames<-`(x, value) - } -) - # spatialCoords ---------------------------------------------------------------- #' @rdname SpatialExperiment-methods @@ -268,13 +168,6 @@ setMethod("scaleFactors", # utils ------------------------------------------------------------------------ -# message for deprecation of spatialData/Names -.msg_spatialData <- function() { - message(paste0( - "Note: spatialData and spatialDataNames have been deprecated; all ", - "columns should be stored in colData and spatialCoords")) -} - #' @export #' @importFrom utils .DollarNames .DollarNames.SpatialExperiment <- function(x, pattern = "") diff --git a/R/SpatialExperiment.R b/R/SpatialExperiment.R index 6133742..d60450b 100644 --- a/R/SpatialExperiment.R +++ b/R/SpatialExperiment.R @@ -44,22 +44,6 @@ #' \code{imageSources}) containing unique image identifiers. #' @param loadImage Logical indicating whether to load image into memory. #' Default = \code{FALSE}. -#' @param spatialDataNames (Deprecated) A \code{character} vector of column -#' names from \code{\link{colData}} to include in \code{\link{spatialData}}. -#' Alternatively, the \code{spatialData} argument may be provided. If both are -#' provided, \code{spatialDataNames} is given precedence, and a warning is -#' returned. (Note: \code{spatialData} and \code{spatialDataNames} have been -#' deprecated; \code{colData} and \code{spatialCoords} should be used for all -#' columns. The arguments have been retained for backward compatibility but -#' may be removed in the future.) -#' @param spatialData (Deprecated) A \code{\link{DataFrame}} containing columns -#' to store in \code{\link{spatialData}}, which must contain at least the -#' columns of spatial coordinates. Alternatively, \code{spatialDataNames} may -#' be provided. If both are provided, \code{spatialDataNames} is given -#' precedence, and a warning is returned. (Note: \code{spatialData} and -#' \code{spatialDataNames} have been deprecated; \code{colData} and -#' \code{spatialCoords} should be used for all columns. The arguments have -#' been retained for backward compatibility but may be removed in the future.) #' #' @details #' In this class, rows represent genes, and columns represent spots (for @@ -217,9 +201,7 @@ SpatialExperiment <- function(..., imageSources=NULL, image_id=NULL, loadImage=FALSE, - imgData=NULL, - spatialDataNames=NULL, - spatialData=NULL) { + imgData=NULL) { sce <- SingleCellExperiment(...) spe <- .sce_to_spe(sce=sce, @@ -230,9 +212,7 @@ SpatialExperiment <- function(..., imageSources=imageSources, image_id=image_id, loadImage=loadImage, - imgData=imgData, - spatialDataNames=spatialDataNames, - spatialData=spatialData) + imgData=imgData) return(spe) } @@ -247,9 +227,7 @@ SpatialExperiment <- function(..., imageSources=NULL, image_id=NULL, loadImage=TRUE, - imgData=NULL, - spatialDataNames=NULL, - spatialData=NULL) { + imgData=NULL) { old <- S4Vectors:::disableValidity() if (!isTRUE(old)) { @@ -270,19 +248,14 @@ SpatialExperiment <- function(..., sample_id <- unique(sce$sample_id) } - if (!is.null(spatialData) || !is.null(spatialDataNames)) { - .msg_spatialData() - } - spe <- new("SpatialExperiment", sce) # in the following code chunk, we give precedence - # to spatialData/CoordsNames over spatialData/Coords - # where spatialDataNames should be in colData, - # and spatialCoordsNames can be in both colData and spatialData - # if both spatialData/Coords and -Names are supplied + # to spatialCoordsNames over spatialCoords + # where spatialCoordsNames should be in colData + # if both spatialCoords and -Names are supplied # we give an informative warning notifying the user - # that spatialData/CoordsNames will be used + # that spatialCoordsNames will be used msg <- function(.) message(sprintf( "Both '%s' and '%sNames' have been supplied;\nusing '%s'. ", ., ., .), @@ -290,8 +263,7 @@ SpatialExperiment <- function(..., if (!is.null(spatialCoordsNames)) { stopifnot(is.character(spatialCoordsNames), - all(spatialCoordsNames %in% names(colData(spe))) - || all(spatialCoordsNames %in% names(spatialData))) + all(spatialCoordsNames %in% names(colData(spe)))) if (!is.null(spatialCoords)) msg("spatialCoords") if (all(spatialCoordsNames %in% names(colData(spe)))) { @@ -299,11 +271,6 @@ SpatialExperiment <- function(..., j <- setdiff(names(colData(spe)), i) spatialCoords(spe) <- as.matrix(colData(spe)[i]) colData(spe) <- colData(spe)[j] - } else { - i <- spatialCoordsNames - j <- setdiff(names(spatialData), i) - spatialCoords(spe) <- as.matrix(spatialData[i]) - spatialData <- spatialData[j] } } else if (!is.null(spatialCoords)) { stopifnot( @@ -315,26 +282,6 @@ SpatialExperiment <- function(..., spatialCoords(spe) <- NULL } - if (!is.null(spatialDataNames)) { - stopifnot( - is.character(spatialDataNames), - spatialDataNames %in% names(colData(spe))) - if (!is.null(spatialData)) - msg("spatialData") - i <- spatialDataNames - j <- setdiff(names(colData(spe)), i) - spd <- colData(spe)[i] - colData(spe) <- colData(spe)[j] - spatialData(spe) <- spd - } else if (!is.null(spatialData)) { - stopifnot( - is(spatialData, "DFrame"), - nrow(spatialData) == ncol(spe)) - spatialData(spe) <- spatialData - } else { - spatialData(spe) <- NULL - } - if (!is.null(imgData)) { stopifnot(imgData$sample_id %in% spe$sample_id) imgData(spe) <- imgData diff --git a/R/Validity.R b/R/Validity.R index 39dff8b..dd6f678 100644 --- a/R/Validity.R +++ b/R/Validity.R @@ -13,16 +13,6 @@ return(msg) } -.spatialData_validity <- function(x, msg=NULL) { - y <- colData(x)[int_metadata(x)$spatialDataNames] - if (!is.null(y) && !is(y, "DFrame")) { - msg <- c(msg, paste( - "'spatialData' field in 'int_colData'", - "should be a 'DFrame'")) - } - return(msg) -} - .colData_validity <- function(obj, msg=NULL) { df <- colData(obj) if (is.null(df$sample_id)) { @@ -86,9 +76,7 @@ msg <- NULL msg <- .colData_validity(object, msg) msg <- .imgData_validity(object, msg) - msg <- .spatialData_validity(object, msg) msg <- .spatialCoords_validity(object, msg) - #msg <- .spatialDataNames_validity(object, msg) if (length(msg)) return(msg) return(TRUE) } diff --git a/R/coerce.R b/R/coerce.R index 75d61d3..78a36b5 100644 --- a/R/coerce.R +++ b/R/coerce.R @@ -8,22 +8,20 @@ #' To do so, we designed two different methods: the traditional \code{as} method #' and the \code{toSpatialExperiment} function (recommended). #' The \code{as} method checks if the \code{SingleCellExperiment} object has -#' already populated \code{int_colData} with three elements: -#' \code{spatialData}, \code{spatialCoords}, and \code{imgData}. +#' already populated \code{int_colData} with two elements: +#' \code{spatialCoords} and \code{imgData}. #' It also checks if \code{colData} already contains a \code{sample_id}. #' In case these checks pass the new \code{SpatialExperiment} will have the same #' values as the \code{SingleCellExperiment} passed object. #' Otherwise a \code{SpatialExperiment} with default values for these slots #' will be created. #' -#' The \code{toSpatialExperiment} method expects a \code{SingleCellExperiment} object -#' and additional arguments as explained in the related section of this +#' The \code{toSpatialExperiment} method expects a \code{SingleCellExperiment} +#' object and additional arguments as explained in the related section of this #' documentation. In case the \code{SingleCellExperiment} object has already -#' populated \code{int_colData} with \code{spatialData} and/or -#' \code{spatialCoords} and/or \code{imgData}, these will be respectively -#' overwritten in case the arguments \code{spatialData}/\code{spatialDataNames} -#' and/or \code{spatialCoords}/\code{spatialCoordsNames} and/or \code{imgData} -#' are not \code{NULL}. +#' populated \code{int_colData} with \code{spatialCoords} and/or \code{imgData}, +#' these will be respectively overwritten in case the arguments +#' \code{spatialCoords/Names} and/or \code{imgData} are not \code{NULL}. #' #' @param sce A \code{\link{SingleCellExperiment}} object. #' @param sample_id A \code{character} sample identifier, which matches the @@ -55,22 +53,6 @@ #' \code{imageSources}) containing unique image identifiers. #' @param loadImage Logical indicating whether to load image into memory. #' Default = \code{FALSE}. -#' @param spatialDataNames (Deprecated) A \code{character} vector of column -#' names from \code{\link{colData}} to include in \code{\link{spatialData}}. -#' Alternatively, the \code{spatialData} argument may be provided. If both are -#' provided, \code{spatialDataNames} is given precedence, and a warning is -#' returned. (Note: \code{spatialData} and \code{spatialDataNames} have been -#' deprecated; \code{colData} and \code{spatialCoords} should be used for all -#' columns. The arguments have been retained for backward compatibility but -#' may be removed in the future.) -#' @param spatialData (Deprecated) A \code{\link{DataFrame}} containing columns -#' to store in \code{\link{spatialData}}, which must contain at least the -#' columns of spatial coordinates. Alternatively, \code{spatialDataNames} may -#' be provided. If both are provided, \code{spatialDataNames} is given -#' precedence, and a warning is returned. (Note: \code{spatialData} and -#' \code{spatialDataNames} have been deprecated; \code{colData} and -#' \code{spatialCoords} should be used for all columns. The arguments have -#' been retained for backward compatibility but may be removed in the future.) #' @aliases #' coerce, SingleCellExperiment, SpatialExperiment-method @@ -128,8 +110,7 @@ setAs( spe <- .sce_to_spe(from, sample_id=sample_id, spatialCoords=icd$spatialCoords, - imgData=icd$imgData, - spatialData=icd$spatialData) + imgData=icd$imgData) return(spe) } ) @@ -143,9 +124,7 @@ toSpatialExperiment <- function(sce, imageSources=NULL, image_id=NULL, loadImage=TRUE, - imgData=NULL, - spatialDataNames=NULL, - spatialData=NULL) { + imgData=NULL) { stopifnot(is(sce, "SingleCellExperiment")) @@ -153,9 +132,6 @@ toSpatialExperiment <- function(sce, if (all(is.null(spatialCoords), is.null(spatialCoordsNames))) { spatialCoords <- int_colData(sce)$spatialCoords } - if (all(is.null(spatialData), is.null(spatialDataNames))) { - spatialData <- int_colData(sce)$spatialData - } if (is.null(imgData)) { imgData <- int_colData(sce)$imgData } @@ -167,8 +143,6 @@ toSpatialExperiment <- function(sce, imageSources = imageSources, image_id = image_id, loadImage = loadImage, - imgData = imgData, - spatialDataNames = spatialDataNames, - spatialData = spatialData) + imgData = imgData) return(spe) } diff --git a/R/subset.R b/R/subset.R index fac9198..1bf0e7b 100644 --- a/R/subset.R +++ b/R/subset.R @@ -35,8 +35,8 @@ NULL # we overwrite the default subsetting method -# to assure that the 'imgData' and 'spatialData' are subsetted if columns/rows -# are dropped +# to assure that the 'imgData' are subsetted +# if columns/rows are dropped #' @importFrom methods callNextMethod #' @export diff --git a/inst/NEWS b/inst/NEWS index a6b39de..b7afe76 100644 --- a/inst/NEWS +++ b/inst/NEWS @@ -1,5 +1,6 @@ changes in version 1.15.2 (2024-06-21) + deprecation of read10xVisium() in favor of VisiumIO's TENxVisiumList() ++ removal of all spatialData-related documentation, code & comments changes in version 1.15.1 (2024-06-20) + bug fix (#151): getImg now handles non-character sample and image IDs diff --git a/man/SpatialExperiment-coercion.Rd b/man/SpatialExperiment-coercion.Rd index 2d6087f..b58f738 100644 --- a/man/SpatialExperiment-coercion.Rd +++ b/man/SpatialExperiment-coercion.Rd @@ -46,24 +46,6 @@ sources.} \item{loadImage}{Logical indicating whether to load image into memory. Default = \code{FALSE}.} - -\item{spatialDataNames}{(Deprecated) A \code{character} vector of column -names from \code{\link{colData}} to include in \code{\link{spatialData}}. -Alternatively, the \code{spatialData} argument may be provided. If both are -provided, \code{spatialDataNames} is given precedence, and a warning is -returned. (Note: \code{spatialData} and \code{spatialDataNames} have been -deprecated; \code{colData} and \code{spatialCoords} should be used for all -columns. The arguments have been retained for backward compatibility but -may be removed in the future.)} - -\item{spatialData}{(Deprecated) A \code{\link{DataFrame}} containing columns -to store in \code{\link{spatialData}}, which must contain at least the -columns of spatial coordinates. Alternatively, \code{spatialDataNames} may -be provided. If both are provided, \code{spatialDataNames} is given -precedence, and a warning is returned. (Note: \code{spatialData} and -\code{spatialDataNames} have been deprecated; \code{colData} and -\code{spatialCoords} should be used for all columns. The arguments have -been retained for backward compatibility but may be removed in the future.)} } \description{ The \code{SpatialExperiment} class inherits from the @@ -72,22 +54,20 @@ classes. To do so, we designed two different methods: the traditional \code{as} method and the \code{toSpatialExperiment} function (recommended). The \code{as} method checks if the \code{SingleCellExperiment} object has -already populated \code{int_colData} with three elements: -\code{spatialData}, \code{spatialCoords}, and \code{imgData}. +already populated \code{int_colData} with two elements: +\code{spatialCoords} and \code{imgData}. It also checks if \code{colData} already contains a \code{sample_id}. In case these checks pass the new \code{SpatialExperiment} will have the same values as the \code{SingleCellExperiment} passed object. Otherwise a \code{SpatialExperiment} with default values for these slots will be created. -The \code{toSpatialExperiment} method expects a \code{SingleCellExperiment} object -and additional arguments as explained in the related section of this +The \code{toSpatialExperiment} method expects a \code{SingleCellExperiment} +object and additional arguments as explained in the related section of this documentation. In case the \code{SingleCellExperiment} object has already -populated \code{int_colData} with \code{spatialData} and/or -\code{spatialCoords} and/or \code{imgData}, these will be respectively -overwritten in case the arguments \code{spatialData}/\code{spatialDataNames} -and/or \code{spatialCoords}/\code{spatialCoordsNames} and/or \code{imgData} -are not \code{NULL}. +populated \code{int_colData} with \code{spatialCoords} and/or \code{imgData}, +these will be respectively overwritten in case the arguments +\code{spatialCoords/Names} and/or \code{imgData} are not \code{NULL}. } \examples{ dir <- system.file( diff --git a/man/SpatialExperiment-methods.Rd b/man/SpatialExperiment-methods.Rd index 8fbf6e6..b0e7bd8 100644 --- a/man/SpatialExperiment-methods.Rd +++ b/man/SpatialExperiment-methods.Rd @@ -2,10 +2,6 @@ % Please edit documentation in R/SpatialExperiment-methods.R, R/imgData.R \name{SpatialExperiment-methods} \alias{SpatialExperiment-methods} -\alias{spatialData} -\alias{spatialData<-} -\alias{spatialDataNames} -\alias{spatialDataNames<-} \alias{spatialCoords} \alias{spatialCoords<-} \alias{spatialCoordsNames} @@ -13,12 +9,6 @@ \alias{imgData} \alias{imgData<-} \alias{scaleFactors} -\alias{spatialData,SpatialExperiment-method} -\alias{spatialData<-,SpatialExperiment,DFrame-method} -\alias{spatialData<-,SpatialExperiment,NULL-method} -\alias{spatialDataNames,SpatialExperiment-method} -\alias{spatialDataNames<-,SpatialExperiment,character-method} -\alias{spatialDataNames<-,SpatialExperiment,NULL-method} \alias{spatialCoords,SpatialExperiment-method} \alias{spatialCoords<-,SpatialExperiment,matrix-method} \alias{spatialCoords<-,SpatialExperiment,NULL-method} @@ -32,18 +22,6 @@ \alias{imgData<-,SpatialExperiment,NULL-method} \title{Methods for spatial attributes} \usage{ -\S4method{spatialData}{SpatialExperiment}(x) - -\S4method{spatialData}{SpatialExperiment,DFrame}(x) <- value - -\S4method{spatialData}{SpatialExperiment,NULL}(x) <- value - -\S4method{spatialDataNames}{SpatialExperiment}(x) - -\S4method{spatialDataNames}{SpatialExperiment,character}(x) <- value - -\S4method{spatialDataNames}{SpatialExperiment,NULL}(x) <- value - \S4method{spatialCoords}{SpatialExperiment}(x) \S4method{spatialCoords}{SpatialExperiment,matrix}(x) <- value @@ -92,26 +70,14 @@ SpatialExperiment objects and their spatial coordinates. \details{ Additional details for each type of data attribute are provided below. -Note: \code{\link{spatialData}} and \code{\link{spatialDataNames}} -(previously used to store a subset of columns from \code{\link{colData}}) -have been deprecated. All columns should be stored in either -\code{\link{spatialCoords}} (numeric matrix containing spatial coordinates) -or \code{\link{colData}} (all other columns). The -\code{spatialData}/\code{spatialDataNames} functionality has been retained -for backward compatibility but may be removed in the future. - See \code{\link{rotateCoords}}, \code{\link{mirrorCoords}}, \code{\link{rotateObject}}, or \code{\link{mirrorObject}} for details on methods to rotate and mirror SpatialExperiment objects and their \code{spatialCoords}. } -\section{spatialData and spatialCoords methods}{ +\section{spatialCoords methods}{ \describe{ -\item{\code{spatialData(x) <- value}: }{ - The \code{spatialData} setter expects a \code{DataFrame}. - If the input does not contain an \code{in_tissue} column, - this will be included with a default value of \code{1}.} \item{\code{spatialCoords(x)}: }{ Getter for numeric matrix of spatial coordinates.} \item{\code{spatialCoords(x) <- value}: }{ @@ -119,15 +85,9 @@ methods to rotate and mirror SpatialExperiment objects and their } } -\section{spatialDataNames and spatialCoordsNames methods}{ +\section{spatialCoordsNames methods}{ \describe{ -\item{\code{spatialDataNames(x)}: }{ - Returns the names of the \code{colData} associated with the - spatial information, which are stored in the \code{int_metadata}.} -\item{\code{spatialDataNames(x) <- value}: }{ - Setter to replace column names - in the \code{spatialData} \code{DataFrame}.} \item{\code{spatialCoordsNames(x)}: }{ Returns the defined names of the spatial coordinates (e.g. \code{c("x", "y")}).} diff --git a/man/SpatialExperiment.Rd b/man/SpatialExperiment.Rd index b18e963..03432c6 100644 --- a/man/SpatialExperiment.Rd +++ b/man/SpatialExperiment.Rd @@ -45,24 +45,6 @@ sources.} \item{loadImage}{Logical indicating whether to load image into memory. Default = \code{FALSE}.} - -\item{spatialDataNames}{(Deprecated) A \code{character} vector of column -names from \code{\link{colData}} to include in \code{\link{spatialData}}. -Alternatively, the \code{spatialData} argument may be provided. If both are -provided, \code{spatialDataNames} is given precedence, and a warning is -returned. (Note: \code{spatialData} and \code{spatialDataNames} have been -deprecated; \code{colData} and \code{spatialCoords} should be used for all -columns. The arguments have been retained for backward compatibility but -may be removed in the future.)} - -\item{spatialData}{(Deprecated) A \code{\link{DataFrame}} containing columns -to store in \code{\link{spatialData}}, which must contain at least the -columns of spatial coordinates. Alternatively, \code{spatialDataNames} may -be provided. If both are provided, \code{spatialDataNames} is given -precedence, and a warning is returned. (Note: \code{spatialData} and -\code{spatialDataNames} have been deprecated; \code{colData} and -\code{spatialCoords} should be used for all columns. The arguments have -been retained for backward compatibility but may be removed in the future.)} } \value{ A \code{SpatialExperiment} object. diff --git a/tests/testthat/test_SpatialExperiment-coercion.R b/tests/testthat/test_SpatialExperiment-coercion.R index 889b223..752e67d 100644 --- a/tests/testthat/test_SpatialExperiment-coercion.R +++ b/tests/testthat/test_SpatialExperiment-coercion.R @@ -18,13 +18,11 @@ test_that("SingleCellExperiment AS SpatialExperiment case 1", { }) test_that("SingleCellExperiment AS SpatialExperiment case 2", { - int_colData(sce)$spatialData <- DataFrame(xyz[,c(1:4)]) int_colData(sce)$spatialCoords <- as.matrix(xyz[,c(5,6)]) expect_s4_class(as(sce, .spe), class=.spe) }) test_that("SingleCellExperiment AS SpatialExperiment case 3", { - int_colData(sce)$spatialData <- DataFrame(xyz[,c(1:4)]) int_colData(sce)$spatialCoords <- as.matrix(xyz[,c(5,6)]) int_colData(sce)$imgData <- img expect_s4_class(as(sce, .spe), class=.spe) @@ -36,28 +34,22 @@ test_that("SingleCellExperiment TO SpatialExperiment case 1" ,{ expect_equal(toSpatialExperiment(sce), as(sce, .spe)) }) - test_that("SingleCellExperiment TO SpatialExperiment case 2" ,{ # case 2: passing "spatial arguments" on simple sce - expect_s4_class(toSpatialExperiment(sce, imgData=img, - spatialData=DataFrame(xyz), - spatialCoordsNames=c("pxl_col_in_fullres", "pxl_row_in_fullres"), - sample_id="sample01"), .spe) + colData(sce) <- DataFrame(xyz) + . <- c("pxl_col_in_fullres", "pxl_row_in_fullres") + spe <- toSpatialExperiment(sce, spatialCoordsNames=.) + expect_s4_class(spe, .spe) + expect_equal(spatialCoords(spe), as.matrix(xyz[, .])) }) test_that("SingleCellExperiment TO SpatialExperiment case 3" ,{ # case 3: passing "spatial arguments" on populated sce # giving priority to "spatial args" - - int_colData(sce)$spatialData <- DataFrame(xyz[, c(1:4)]) - int_colData(sce)$spatialCoords <- as.matrix(xyz[, c(5,6)]) - xyz$in_tissue <- 1 - xyz$pxl_row_in_fullres <- 1 - spe <- toSpatialExperiment(sce, imgData=img, - spatialData=DataFrame(xyz), - spatialCoordsNames=c("pxl_col_in_fullres", "pxl_row_in_fullres"), - sample_id="sample01") + colData(sce) <- DataFrame(xyz) + . <- c("pxl_col_in_fullres", "pxl_row_in_fullres") + int_colData(sce)$spatialCoords <- as.matrix(xyz[, rev(.)]) + spe <- toSpatialExperiment(sce, spatialCoordsNames=.) expect_s4_class(spe, .spe) - expect_equal(spatialCoords(spe), as.matrix(xyz[, c(6,5)])) - expect_equal(spatialData(spe), DataFrame(xyz[, c(1:4)])) + expect_equal(spatialCoords(spe), as.matrix(xyz[, .])) }) diff --git a/tests/testthat/test_SpatialExperiment-colData.R b/tests/testthat/test_SpatialExperiment-colData.R index 2a83845..5f2086b 100644 --- a/tests/testthat/test_SpatialExperiment-colData.R +++ b/tests/testthat/test_SpatialExperiment-colData.R @@ -6,7 +6,6 @@ test_that("colData()<-NULL retains only sample_id", { colData(tmp) <- NULL expect_null(tmp$foo) expect_identical(tmp$sample_id, spe$sample_id) - expect_identical(spatialDataNames(tmp), character()) }) test_that("valid colData<- without sample_id field protects sample_id", { diff --git a/tests/testthat/test_SpatialExperiment-methods.R b/tests/testthat/test_SpatialExperiment-methods.R index 3345b6c..b76d5c9 100644 --- a/tests/testthat/test_SpatialExperiment-methods.R +++ b/tests/testthat/test_SpatialExperiment-methods.R @@ -1,50 +1,5 @@ example(SpatialExperiment, echo = FALSE) -test_that("spatialData()", { - spd <- spatialData(spe) - expect_is(spd, "DFrame") - expect_identical(spd, colData(spe)[spatialDataNames(spe)]) -}) - -test_that("spatialData(),NULL", { - tmp <- spe; spatialData(tmp) <- NULL - spd <- spatialData(tmp) - expect_equal(dim(spd), c(ncol(spe), 0)) - expect_identical(spatialDataNames(tmp), character()) - expect_identical(spd, colData(tmp)[spatialDataNames(tmp)]) -}) - -test_that("spatialData<-,ANY", { - mat <- matrix(0, ncol(spe), 2) - expect_error(spatialData(spe) <- mat) - df <- data.frame(mat) - expect_error(spatialData(spe) <- mat) -}) - -test_that("spatialDataNames()", { - expect_identical( - spatialDataNames(spe), - int_metadata(spe)$spatialDataNames) -}) - -test_that("spatialDataNames()<-,character", { - # invalid replacement (anything not in colData) - expect_error(spatialDataNames(spe) <- "peter_pan") - # valid replacement (anything in colData) - i <- spatialDataNames(spe) <- sample(names(colData(spe)), 2) - expect_identical(int_metadata(spe)$spatialDataNames, i) -}) - -test_that("spatialDataNames()<-,NULL", { - cd <- colData(spe) - old <- spatialDataNames(spe) - spatialDataNames(spe) <- NULL - new <- spatialDataNames(spe) - # colData shouldn't be affected - expect_identical(colData(spe), cd) - expect_identical(new, character(0)) -}) - test_that("spatialCoordsNames()", { expect_identical( spatialCoordsNames(spe), diff --git a/tests/testthat/test_SpatialExperiment-validity.R b/tests/testthat/test_SpatialExperiment-validity.R index 846990a..7c6f166 100644 --- a/tests/testthat/test_SpatialExperiment-validity.R +++ b/tests/testthat/test_SpatialExperiment-validity.R @@ -3,7 +3,6 @@ # @colData<- instead of colData<- # in_metadata$imgData<- instead of imgData<- # int_colData$spatialCoords <- instead of spatialCoords<- -# int_metadata$spatialDataNames instead of spatialDataNames<- test_that("colData", { # initialize mock SPE @@ -34,19 +33,6 @@ test_that("colData", { expect_error(validObject(tmp)) }) -test_that("SpatialDataNames", { - # initialize mock SPE - spe <- SpatialExperiment( - assays=diag(n <- 10), - colData=DataFrame(a=seq(n), b=seq(n))) - # valid replacements - int_metadata(spe)$spatialDataNames <- "a" - expect_true(validObject(spe)) - # invalid replacements - int_metadata(spe)$spatialDataNames <- "c" - expect_error(validObject(spe)) -}) - test_that("spatialCoords", { # initialize mock SPE spe <- SpatialExperiment( diff --git a/tests/testthat/test_SpatialExperiment.R b/tests/testthat/test_SpatialExperiment.R index 8a34624..7d9dd86 100644 --- a/tests/testthat/test_SpatialExperiment.R +++ b/tests/testthat/test_SpatialExperiment.R @@ -4,10 +4,6 @@ test_that("empty constructor", { spe <- SpatialExperiment() expect_is(imgData(spe), "DFrame") expect_true(isEmpty(imgData(spe))) - expect_identical(spatialDataNames(spe), character()) - expect_is(spatialData(spe), "DFrame") - expect_true(isEmpty(spatialData(spe))) - expect_equal(dim(spatialData(spe)), c(ncol(spe), 0)) expect_null(spatialCoordsNames(spe)) expect_is(spatialCoords(spe), "matrix") expect_equal(dim(spatialCoords(spe)), c(ncol(spe), 0)) @@ -20,20 +16,11 @@ test_that("spatialCoordsNames = character in colData", { expect_identical(spatialCoords(spe), as.matrix(cd)) }) -test_that("spatialDataNames = character in colData", { +test_that("spatialCoordsNames = character in colData", { cd <- DataFrame(x=numeric(), y=numeric()) - spe <- SpatialExperiment(colData=cd, spatialDataNames=names(cd)) - expect_identical(spatialDataNames(spe), names(cd)) - expect_identical(spatialData(spe), cd) -}) - -test_that("spatialData/CoordsNames = character in colData", { - cd <- DataFrame(x=numeric(), y=numeric(), z=numeric()) spe <- SpatialExperiment( colData=cd, - spatialDataNames="z", spatialCoordsNames=c("x", "y")) - expect_identical(spatialDataNames(spe), "z") expect_identical(spatialCoordsNames(spe), c("x", "y")) expect_true(!any(c("x", "y") %in% names(colData(spe)))) }) @@ -53,31 +40,6 @@ test_that("spatialCoords = numeric matrix", { expect_identical(spatialCoordsNames(spe), colnames(mat)) }) -test_that("spatialData = DFrame", { - mat <- matrix(0, n <- 10, m <- 5) - expect_error(SpatialExperiment(spatialData = mat)) - y <- diag(n) - df <- DataFrame(mat) - names(df) <- letters[seq(m)] - spe <- SpatialExperiment(assays = y, spatialData = df) - expect_is(spatialData(spe), "DFrame") - expect_identical(spatialData(spe), df) - expect_identical(spatialDataNames(spe), names(df)) -}) - -test_that("message when spatialData & -Names are supplied", { - cd <- DataFrame(x=numeric(), y=numeric()) - expect_message( - spe <- SpatialExperiment( - colData=cd, - spatialData=cd, - spatialDataNames=names(cd))) - expect_identical(spe, - SpatialExperiment( - colData=cd, - spatialDataNames=names(cd))) -}) - test_that("message when spatialCoords & -Names are supplied", { cd <- DataFrame(x=numeric(), y=numeric()) expect_message( @@ -130,8 +92,6 @@ test_that(".sce_to_spe()", { expect_is(spe, "SpatialExperiment") expect_is(imgData(spe), "DFrame") expect_true(isEmpty(imgData(spe))) - expect_is(spatialData(spe), "DFrame") - expect_true(isEmpty(spatialData(spe))) expect_identical(colData(spe), colData(sce)) spe <- .sce_to_spe(sce, imgData=id) @@ -154,12 +114,3 @@ test_that("scaleFactors should be numeric, a named list or JSON file", { expect_silent(.sce_to_spe(sce, imageSources=img_fn, scaleFactors=list(tissue_lowres_scalef=1))) }) - -test_that("deprecated spatialData/Names returns message", { - expect_message(spatialData(spe)) - expect_message(spatialDataNames(spe)) - expect_message(SpatialExperiment(spatialData = DataFrame())) - cd <- DataFrame(x = numeric(), y = numeric()) - expect_message(SpatialExperiment(colData = cd, spatialDataNames = names(cd))) -}) - diff --git a/tests/testthat/test_read10xVisium.R b/tests/testthat/test_read10xVisium.R index cd38c65..cd4082f 100644 --- a/tests/testthat/test_read10xVisium.R +++ b/tests/testthat/test_read10xVisium.R @@ -23,11 +23,6 @@ test_that("data are read correctly", { sids <- rep.int(sample_ids, vapply(xyz, nrow, numeric(1))) xyz <- data.frame(sample_id=sids, do.call(rbind, xyz)) xyz$in_tissue <- as.logical(xyz$in_tissue) - - cd <- cbind(colData(x), spatialData(x)) - expect_identical( - table(cd$sample_id, cd$in_tissue), - table(xyz$sample_id, xyz$in_tissue)) sfs <- file.path(samples, "spatial", "scalefactors_json.json") sfs <- lapply(sfs, function(.) fromJSON(file=.))