如何在R中的功能内测试功能?

时间:2019-05-13 18:01:57

标签: r unit-testing closures testthat

我想使用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创建

2 个答案:

答案 0 :(得分:1)

另一种方法:在模型函数中显式设置函数范围:

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)

答案 1 :(得分:0)

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