Как проверить функцию внутри функции в R? - PullRequest
0 голосов
/ 13 мая 2019

Я хотел бы использовать пакет 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"

Создано в 2019-05-13 пакетом представ. (v0.2.1)

Ответы [ 2 ]

1 голос
/ 13 мая 2019

Другой подход: явно установить область действия функции в функции модели:

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)
0 голосов
/ 14 мая 2019

Предполагая, что вы используете Rstudio, попробуйте оба варианта debugonce(model) и debugonce(objective_function).

...