r - 我在哪里为 R 包中的测试指定随机种子?

标签 r devtools r-package testthat

我正在使用 testthat为我的 R 包编写测试。我的一项测试使用了 jitter .我想确保测试是可重复的。

我放set.seed(1014)

  • library(testthat) 之前或之后在 ./tests/testthat.R ;或
  • context("Test 中的每个测试文件的顶部(在 ./tests/testthat/test-function.R 之前或之后) ;或
  • 在每个单元测试的顶部(test_that("Example works"){jitter(1)})) 中的 ./tests/testthat/test-function.R 内?

  • 为什么?

    最佳答案

    如果你只声明set.seed()一次,那么您总是需要以相同的顺序运行使用随机性的测试以获得相同的结果。但是,单元测试仅在以特定顺序运行时才起作用可能不是一个好主意。您应该将种子设置为接近您需要验证返回随机值的时间。

    这是一个可以为代码块设置种子的函数

    with_seed <- function(seed, code) {
      code <- substitute(code)
      orig.seed <- .Random.seed
      on.exit(.Random.seed <<- orig.seed)
      set.seed(seed)
      eval.parent(code)
    }
    

    你可以像这样运行它
    with_seed(5, rnorm(5))
    

    或者
    with_seed(5, {
      a <- rnorm(5)
      b <- runif(5)
      a + b
    })
    

    但是你仍然会得到 block 外原始种子的随机数。

    如果您希望从现有包中提取这样的功能,withr::set_seed似乎做同样的事情。

    关于r - 我在哪里为 R 包中的测试指定随机种子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56191862/

    相关文章:

    installation - R-INLA 在 R 4.1.1 上安装失败

    r - 如何在R中读取其中某些值包含百分比符号(%)的csv文件

    r - 如何使用 devtools install_github 从私有(private)仓库安装 R 包?

    r - 转换多个列类

    r - 是否有检查使用 devtools::install_github 安装的软件包是否已更新的功能?

    xpath - 最好的 XPath 工具

    r - 在 travis-ci 构建中查找/指定 gdal 的安装路径

    r - 压缩 R 包中的共享库

    r - 使用 system() 时通过 R 捕获 pid 进程

    user-interface - 以交互方式更改直方图箱的相对高度