如何在 R 函数中测试函数?

How to test a function within a function in R?

我想使用 testthat 包来测试被另一个函数包含的函数。

如何测试这样的功能?

如果这不可能,我如何重构代码以便测试 objective_function 成为可能?


示例

model <- function(parameter) {
  objective_function <- function(x) {
    (x - p)^2
  }

  # Make parameter integer
  p <- round(parameter)
  result <- optimize(objective_function, c(-10, 10))
  result$minimum
}

# Works
testthat::expect_equal(model(4.2), 4)

# Does not work
# And how would you pass p to the following?
testthat::expect_equal(objective_function(4.2), 4)
#> Error in objective_function(4.2): could not find function "objective_function"

reprex package (v0.2.1)

于 2019-05-13 创建

另一种方法:在模型函数中显式设置函数作用域:

objective_function <- function(x) {
  (x - p)^2
}

model <- function(parameter) {
  # Make parameter integer
  p <- round(parameter)
  environment(objective_function) <- environment()
  result <- optimize(objective_function, interval=c(-10, 10))
  result$minimum
}

model(4.2)

p <- 4
objective_function(4.2)

假设您使用的是 Rstudio,尝试 debugonce(model)debugonce(objective_function) 可能是您的答案。