Skip to content

Commit c54e57d

Browse files
authored
Merge pull request #8638 from satijalab/develop
Release/5.0.3
2 parents 656fc8b + b1a8c8f commit c54e57d

File tree

12 files changed

+101
-74
lines changed

12 files changed

+101
-74
lines changed

DESCRIPTION

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Package: Seurat
2-
Version: 5.0.2
3-
Date: 2024-02-28
2+
Version: 5.0.3
3+
Date: 2024-03-18
44
Title: Tools for Single Cell Genomics
55
Description: A toolkit for quality control, analysis, and exploration of single cell RNA sequencing data. 'Seurat' aims to enable users to identify and interpret sources of heterogeneity from single cell transcriptomic measurements, and to integrate diverse types of single cell data. See Satija R, Farrell J, Gennert D, et al (2015) <doi:10.1038/nbt.3192>, Macosko E, Basu A, Satija R, et al (2015) <doi:10.1016/j.cell.2015.05.002>, Stuart T, Butler A, et al (2019) <doi:10.1016/j.cell.2019.05.031>, and Hao, Hao, et al (2020) <doi:10.1101/2020.10.12.335331> for more details.
66
Authors@R: c(

NEWS.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
# Seurat 5.0.3 (2024-03-18)
2+
3+
## Changes
4+
- Fixed `PercentAbove` to discount null values ([#8412](https://github.com/satijalab/seurat/issues/8412))
5+
- Added `log` parameter to `FeatureScatter`
6+
- Fixed handling of `clip.range` for `SCTransform` when `ncells` is less than the size of the passed dataset
7+
18
# Seurat 5.0.2 (2024-02-28)
29

310
## Changes

R/convenience.R

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ NULL
99

1010
#' @param fov Name to store FOV as
1111
#' @param assay Name to store expression matrix as
12-
#' @inheritDotParams ReadAkoya
12+
#' @param ... Ignored
1313
#'
1414
#' @return \code{LoadAkoya}: A \code{\link[SeuratObject]{Seurat}} object
1515
#'

R/preprocessing5.R

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1289,7 +1289,6 @@ SCTransform.StdAssay <- function(
12891289
counts.x <- as.sparse(x = layer.data[, sample.int(n = ncol(x = layer.data), size = min(ncells, ncol(x = layer.data)) )])
12901290
min_var <- (median(counts.x@x)/5)^2
12911291
}
1292-
res_clip_range <- vst_out.reference$arguments$res_clip_range
12931292

12941293
# Step 2: Use learned model to calculate residuals in chunks
12951294
cells.vector <- 1:ncol(x = layer.data)
@@ -1324,7 +1323,7 @@ SCTransform.StdAssay <- function(
13241323
umi = counts.vp[variable.features,,drop=FALSE],
13251324
residual_type = "pearson",
13261325
min_variance = min_var,
1327-
res_clip_range = res_clip_range,
1326+
res_clip_range = clip.range,
13281327
verbosity = FALSE
13291328
)
13301329
} else {
@@ -1333,7 +1332,7 @@ SCTransform.StdAssay <- function(
13331332
umi = counts.vp[all_features,,drop=FALSE],
13341333
residual_type = "pearson",
13351334
min_variance = min_var,
1336-
res_clip_range = res_clip_range,
1335+
res_clip_range = clip.range,
13371336
verbosity = FALSE
13381337
)
13391338
}
@@ -1408,9 +1407,14 @@ SCTransform.StdAssay <- function(
14081407
layer.counts.tmp <- as.sparse(x = layer.counts.tmp)
14091408
vst_out$cell_attr <- vst_out$cell_attr[, c("log_umi"), drop=FALSE]
14101409
vst_out$model_pars_fit <- vst_out$model_pars_fit[variable.features.target,,drop=FALSE]
1411-
new_residual <- GetResidualsChunked(vst_out = vst_out, layer.counts = layer.counts.tmp,
1412-
residual_type = "pearson", min_variance = min_var, res_clip_range = res_clip_range,
1413-
verbose = FALSE)
1410+
new_residual <- GetResidualsChunked(
1411+
vst_out = vst_out,
1412+
layer.counts = layer.counts.tmp,
1413+
residual_type = "pearson",
1414+
min_variance = min_var,
1415+
res_clip_range = clip.range,
1416+
verbose = FALSE
1417+
)
14141418
old_residual <- GetAssayData(object = sct.assay.list[[layer.name]], slot = 'scale.data')
14151419
merged_residual <- rbind(old_residual, new_residual)
14161420
merged_residual <- ScaleData(

R/utilities.R

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1127,7 +1127,7 @@ MinMax <- function(data, min, max) {
11271127
#' PercentAbove(sample(1:100, 10), 75)
11281128
#'
11291129
PercentAbove <- function(x, threshold) {
1130-
return(length(x = x[x > threshold]) / length(x = x))
1130+
return (sum(x > threshold, na.rm = T) / length(x))
11311131
}
11321132

11331133
#' Calculate the percentage of all counts that belong to a given set of features

R/visualization.R

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1983,6 +1983,7 @@ CellScatter <- function(
19831983
#' @param raster.dpi Pixel resolution for rasterized plots, passed to geom_scattermore().
19841984
#' Default is c(512, 512).
19851985
#' @param jitter Jitter for easier visualization of crowded points (default is FALSE)
1986+
#' @param log Plot features on the log scale (default is FALSE)
19861987
#'
19871988
#' @return A ggplot object
19881989
#'
@@ -2018,7 +2019,8 @@ FeatureScatter <- function(
20182019
ncol = NULL,
20192020
raster = NULL,
20202021
raster.dpi = c(512, 512),
2021-
jitter = FALSE
2022+
jitter = FALSE,
2023+
log = FALSE
20222024
) {
20232025
cells <- cells %||% colnames(x = object)
20242026
if (isTRUE(x = shuffle)) {
@@ -2078,6 +2080,9 @@ FeatureScatter <- function(
20782080
}
20792081
)
20802082
}
2083+
if (log) {
2084+
plot <- plot + scale_x_log10() + scale_y_log10()
2085+
}
20812086
plot
20822087
}
20832088
)

cran-comments.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
# Seurat v5.0.2
1+
# Seurat v5.0.3
22

33
## Test environments
4-
* local ubuntu 20.04 install, R 4.1.3
4+
* local ubuntu 20.04 install, R 4.3.2
55
* win-builder (oldrelease, release, devel)
6-
* mac-builder (release)
6+
* mac-builder (release, devel)
77

88
## R CMD check results
99

@@ -24,6 +24,6 @@ BPCells and presto are hosted on R-universe and used conditionally in Seurat.
2424

2525
There are two packages that depend on Seurat: CACIMAR and scCustomize; this update does not impact their functionality
2626

27-
There are 28 packages that import Seurat: AnanseSeurat, APackOfTheClones, bbknnR, CAMML, DR.SC, DWLS, ggsector, mixhvg, nebula, Platypus, PRECAST, ProFAST, rPanglaoDB, scaper, scDiffCom, scfetch, scGate, scGOclust, scMappR, scperturbR, scpoisson, SCRIP, scRNAstat, SignacX, SoupX, SPECK, STREAK, and tidyseurat; this update does not impact their functionality
27+
There are 31 packages that import Seurat: AnanseSeurat, APackOfTheClones, bbknnR, CAMML, DR.SC, DWLS, GeneNMF, ggsector, mixhvg, nebula, Platypus, PRECAST, ProFAST, rPanglaoDB, scAnnotate, scaper, sccca, scDiffCom, scfetch, scGate, scGOclust, scMappR, scperturbR, scpoisson, SCRIP, scRNAstat, SignacX, SoupX, SPECK, STREAK, and tidyseurat; this update does not impact their functionality
2828

2929
There are 22 packages that suggest Seurat: BisqueRNA, Canek, cellpypes, CIARA, ClustAssess, clustree, combiroc, conos, countland, CRMetrics, CytoSimplex, DIscBIO, dyngen, grandR, harmony, RESET, rliger, SCORPIUS, SCpubr, Signac, treefit, and VAM; this update does not impact their functionality

man/FeatureScatter.Rd

Lines changed: 4 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

man/ReadAkoya.Rd

Lines changed: 1 addition & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/testthat/test_integration5.R

Lines changed: 25 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ set.seed(42)
33

44

55
# checks that the absolute value of `x` and `y` are within `tolerance`
6-
expect_abs_equal <- function(x, y, tolerance = 1.0e-06) {
6+
expect_abs_equal <- function(x, y, tolerance = 1.0e-04) {
77
expect_equal(abs(x), abs(y), tolerance = tolerance)
88
}
99

@@ -53,15 +53,15 @@ test_that("IntegrateLayers works with HarmonyIntegration", {
5353
# reductions sporadically flip sign only compare absolute values
5454
expect_abs_equal(
5555
Embeddings(integrated[["integrated"]])[5, 5],
56-
0.391151
56+
0.3912
5757
)
5858
expect_abs_equal(
5959
Embeddings(integrated[["integrated"]])[40, 25],
60-
0.666826
60+
0.6668
6161
)
6262
expect_abs_equal(
6363
Embeddings(integrated[["integrated"]])[75, 45],
64-
0.724809
64+
0.7248
6565
)
6666
})
6767

@@ -85,17 +85,15 @@ test_that("IntegrateLayers works with CCAIntegration", {
8585
# reductions sporadically flip sign only compare absolute values
8686
expect_abs_equal(
8787
Embeddings(integrated[["integrated"]])[5, 5],
88-
0.917346
88+
0.9174
8989
)
9090
expect_abs_equal(
9191
Embeddings(integrated[["integrated"]])[40, 25],
92-
1.488484
92+
1.4885
9393
)
9494
expect_abs_equal(
9595
Embeddings(integrated[["integrated"]])[75, 45],
96-
0.544193,
97-
# added to pass macOS builder checks for v5.0.2
98-
tolerance = 8.1e-06
96+
0.5442
9997
)
10098
})
10199

@@ -119,17 +117,15 @@ test_that("IntegrateLayers works with RPCAIntegration", {
119117
# reductions sporadically flip sign only compare absolute values
120118
expect_abs_equal(
121119
Embeddings(integrated[["integrated"]])[5, 5],
122-
0.178462
120+
0.1785
123121
)
124122
expect_abs_equal(
125123
Embeddings(integrated[["integrated"]])[40, 25],
126-
0.583150
124+
0.5832
127125
)
128126
expect_abs_equal(
129127
Embeddings(integrated[["integrated"]])[75, 45],
130-
0.544193,
131-
# added to pass macOS builder checks for v5.0.2
132-
tolerance = 8.1e-06
128+
0.5442
133129
)
134130
})
135131

@@ -153,17 +149,15 @@ test_that("IntegrateLayers works with JointPCAIntegration", {
153149
# reductions sporadically flip sign only compare absolute values
154150
expect_abs_equal(
155151
Embeddings(integrated[["integrated"]])[5, 5],
156-
0.409180
152+
0.4092
157153
)
158154
expect_abs_equal(
159155
Embeddings(integrated[["integrated"]])[40, 25],
160-
0.324614
156+
0.3246
161157
)
162158
expect_abs_equal(
163159
Embeddings(integrated[["integrated"]])[75, 45],
164-
0.544193,
165-
# added to pass macOS builder checks for v5.0.2
166-
tolerance = 8.1e-06
160+
0.5442
167161
)
168162
})
169163

@@ -240,15 +234,15 @@ test_that("IntegrateLayers works with HarmonyIntegration & SCTransform", {
240234
# reductions sporadically flip sign only compare absolute values
241235
expect_abs_equal(
242236
Embeddings(integrated[["integrated"]])[5, 5],
243-
1.1519947
237+
1.1520
244238
)
245239
expect_abs_equal(
246240
Embeddings(integrated[["integrated"]])[40, 25],
247-
1.0301467
241+
1.0302
248242
)
249243
expect_abs_equal(
250244
Embeddings(integrated[["integrated"]])[75, 45],
251-
0.1885502
245+
0.1886
252246
)
253247
})
254248

@@ -274,15 +268,15 @@ test_that("IntegrateLayers works with CCAIntegration & SCTransform", {
274268
# reductions sporadically flip sign only compare absolute values
275269
expect_abs_equal(
276270
Embeddings(integrated[["integrated"]])[5, 5],
277-
1.611324
271+
1.6113
278272
)
279273
expect_abs_equal(
280274
Embeddings(integrated[["integrated"]])[40, 25],
281-
0.692647
275+
0.6927
282276
)
283277
expect_abs_equal(
284278
Embeddings(integrated[["integrated"]])[75, 45],
285-
0.085520
279+
0.0855
286280
)
287281
})
288282

@@ -308,15 +302,15 @@ test_that("IntegrateLayers works with RPCAIntegration & SCTransform", {
308302
# reductions sporadically flip sign only compare absolute values
309303
expect_abs_equal(
310304
Embeddings(integrated[["integrated"]])[5, 5],
311-
1.649217
305+
1.6492
312306
)
313307
expect_abs_equal(
314308
Embeddings(integrated[["integrated"]])[40, 25],
315-
0.734325
309+
0.7343
316310
)
317311
expect_abs_equal(
318312
Embeddings(integrated[["integrated"]])[75, 45],
319-
0.085520
313+
0.0855
320314
)
321315
})
322316

@@ -342,14 +336,14 @@ test_that("IntegrateLayers works with JointPCAIntegration & SCTransform", {
342336
# reductions sporadically flip sign only compare absolute values
343337
expect_abs_equal(
344338
Embeddings(integrated[["integrated"]])[5, 5],
345-
0.342729
339+
0.3427
346340
)
347341
expect_abs_equal(
348342
Embeddings(integrated[["integrated"]])[40, 25],
349-
0.101470
343+
0.1015
350344
)
351345
expect_abs_equal(
352346
Embeddings(integrated[["integrated"]])[75, 45],
353-
0.085520
347+
0.0855
354348
)
355349
})

0 commit comments

Comments
 (0)