diff --git a/NEWS.md b/NEWS.md index 14dd8a31..1b87ee8d 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,5 +1,7 @@ # mlr3misc (development version) +* feat: `as_callbacks()` returns a list named by the callback ids now. + # mlr3misc 0.16.0 * fix: `crate()` is using the correct 'topenv' environment now. diff --git a/R/Callback.R b/R/Callback.R index c0818848..c0429c67 100644 --- a/R/Callback.R +++ b/R/Callback.R @@ -145,13 +145,14 @@ as_callbacks.NULL = function(x, ...) { # nolint #' @rdname as_callback #' @export as_callbacks.list = function(x, clone = FALSE, ...) { # nolint - lapply(x, as_callback, clone = clone, ...) + callbacks = lapply(x, as_callback, clone = clone, ...) + set_names(callbacks, map(callbacks, "id")) } #' @rdname as_callback #' @export as_callbacks.Callback = function(x, clone = FALSE, ...) { # nolint - list(if (clone) x$clone(deep = TRUE) else x) + set_names(list(if (clone) x$clone(deep = TRUE) else x), x$id) } #' @title Call Callbacks diff --git a/man/mlr3misc-package.Rd b/man/mlr3misc-package.Rd index e33bdec1..97a7e974 100644 --- a/man/mlr3misc-package.Rd +++ b/man/mlr3misc-package.Rd @@ -20,10 +20,11 @@ Useful links: } \author{ -\strong{Maintainer}: Michel Lang \email{michellang@gmail.com} (\href{https://orcid.org/0000-0001-9754-0393}{ORCID}) +\strong{Maintainer}: Marc Becker \email{marcbecker@posteo.de} (\href{https://orcid.org/0000-0002-8115-0400}{ORCID}) Authors: \itemize{ + \item Michel Lang \email{michellang@gmail.com} (\href{https://orcid.org/0000-0001-9754-0393}{ORCID}) \item Patrick Schratz \email{patrick.schratz@gmail.com} (\href{https://orcid.org/0000-0003-0748-6624}{ORCID}) } diff --git a/tests/testthat/test_Callback.R b/tests/testthat/test_Callback.R index 80491b5a..60926ec4 100644 --- a/tests/testthat/test_Callback.R +++ b/tests/testthat/test_Callback.R @@ -89,8 +89,6 @@ test_that("call_back() function works", { expect_equal(context$d, 1) }) - - test_that("as_callbacks.Callback works", { CallbackTest = R6Class("CallbackTest", inherit = Callback, @@ -104,4 +102,10 @@ test_that("as_callbacks.Callback works", { test_callback = CallbackTest$new(id = "mlr3misc.test", label = "Test Callback", man = "mlr3misc::Callback") expect_list(as_callbacks(test_callback)) + expect_names(names(as_callbacks(test_callback)), identical.to = "mlr3misc.test") + + test_callback_2 = CallbackTest$new(id = "mlr3misc.test_2", label = "Test Callback", man = "mlr3misc::Callback") + + expect_list(as_callbacks(list(test_callback, test_callback_2))) + expect_names(names(as_callbacks(list(test_callback, test_callback_2))), identical.to = c("mlr3misc.test", "mlr3misc.test_2")) })