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