我想使用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创建
答案 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)
可能是您的答案。