From 75d6fdc9f9a18011cd871b8bbc872e411e458b7e Mon Sep 17 00:00:00 2001 From: Bjarke Hautop Date: Mon, 18 May 2026 15:53:08 +0200 Subject: [PATCH 1/2] Don't call on.exit() inside defer() --- R/seed.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/R/seed.R b/R/seed.R index 2191241c..28f4997e 100644 --- a/R/seed.R +++ b/R/seed.R @@ -44,9 +44,9 @@ local_seed <- function(seed, defer(envir = .local_envir, { if (is.null(old_seed)) { - on.exit(rm_seed(), add = TRUE) + rm_seed() } else { - on.exit(set_seed(old_seed), add = TRUE) + set_seed(old_seed) } }) From b87f5db230ba0a2c2606802a2875d6389911e818 Mon Sep 17 00:00:00 2001 From: Bjarke Hautop Date: Mon, 18 May 2026 15:54:13 +0200 Subject: [PATCH 2/2] Add test from #286 --- tests/testthat/test-seed.R | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tests/testthat/test-seed.R b/tests/testthat/test-seed.R index b4da2846..172f5768 100644 --- a/tests/testthat/test-seed.R +++ b/tests/testthat/test-seed.R @@ -69,6 +69,17 @@ test_that("local_seed works as expected", { expect_false(x == y) }) +test_that("local_seed doesn't modify `.Random.seed` (#286)", { + f1 <- function(n, seed) { + local_seed(seed) + rnorm(n) + } + set.seed(42) + seed3 <- .Random.seed + rslt3 <- f1(5, 41) + expect_identical(seed3, .Random.seed) +}) + test_that("with_preserve_seed preserves empty seed", { rm_seed() with_preserve_seed(runif(1))