From a825bfc64fbd6b8c1f8d435f0fd5c7463c7a2de7 Mon Sep 17 00:00:00 2001 From: Emil Hvitfeldt Date: Wed, 26 Jan 2022 16:27:11 -0800 Subject: [PATCH 1/4] Add check for zero possible engines in fit.model_spec --- R/fit.R | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/R/fit.R b/R/fit.R index 6fdb5265a..1ede99c9c 100644 --- a/R/fit.R +++ b/R/fit.R @@ -111,6 +111,15 @@ fit.model_spec <- rlang::abort("The 'control' argument should have class 'control_parsnip'.") } dots <- quos(...) + + if (length(possible_engines(object)) == 0) { + rlang::abort( + glue::glue( + "No engines where loaded for `{class(object)[1]}`.", + " Please load extension package that provides one." + ) + ) + } if (is.null(object$engine)) { eng_vals <- possible_engines(object) object$engine <- eng_vals[1] From 8ec258c6e05f15851c315c53d9642e1c19f1eef2 Mon Sep 17 00:00:00 2001 From: Emil Hvitfeldt Date: Wed, 26 Jan 2022 16:27:20 -0800 Subject: [PATCH 2/4] Add tests for zero possible engines in fit.model_spec --- tests/testthat/test_fit_interfaces.R | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tests/testthat/test_fit_interfaces.R b/tests/testthat/test_fit_interfaces.R index fd1d41534..cec6ca67a 100644 --- a/tests/testthat/test_fit_interfaces.R +++ b/tests/testthat/test_fit_interfaces.R @@ -108,3 +108,17 @@ test_that("elapsed time parsnip mods", { expect_equal(sum(grepl("Fit time", output3)), 0) }) +test_that('No loaded engines', { + expect_error( + linear_reg() %>% fit(mpg ~., data = mtcars), + regexp = NA + ) + expect_error( + cubist_rules() %>% fit(mpg ~., data = mtcars), + regexp = "`cubist_rules`. Please load extension package that provides one." + ) + expect_error( + poisson_reg() %>% fit(mpg ~., data = mtcars), + regexp = "`poisson_reg`. Please load extension package that provides one." + ) +}) From 221962eb80a94568d1b21507db29f5367eeb5753 Mon Sep 17 00:00:00 2001 From: Max Kuhn Date: Mon, 7 Feb 2022 09:00:15 -0500 Subject: [PATCH 3/4] clarify error message --- R/fit.R | 3 ++- tests/testthat/test_fit_interfaces.R | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/R/fit.R b/R/fit.R index 1ede99c9c..e5d3f6dc4 100644 --- a/R/fit.R +++ b/R/fit.R @@ -116,7 +116,8 @@ fit.model_spec <- rlang::abort( glue::glue( "No engines where loaded for `{class(object)[1]}`.", - " Please load extension package that provides one." + " Please load a parsnip extension package that provides one.", + " See https://www.tidymodels.org/find/parsnip/ " ) ) } diff --git a/tests/testthat/test_fit_interfaces.R b/tests/testthat/test_fit_interfaces.R index cec6ca67a..3847c9209 100644 --- a/tests/testthat/test_fit_interfaces.R +++ b/tests/testthat/test_fit_interfaces.R @@ -115,10 +115,10 @@ test_that('No loaded engines', { ) expect_error( cubist_rules() %>% fit(mpg ~., data = mtcars), - regexp = "`cubist_rules`. Please load extension package that provides one." + regexp = "Please load a parsnip extension package that provides one" ) expect_error( poisson_reg() %>% fit(mpg ~., data = mtcars), - regexp = "`poisson_reg`. Please load extension package that provides one." + regexp = "Please load a parsnip extension package that provides one" ) }) From ebf5a752ab6b07e3196fb8d0b09f261b5d474e0c Mon Sep 17 00:00:00 2001 From: Max Kuhn Date: Mon, 7 Feb 2022 09:59:51 -0500 Subject: [PATCH 4/4] fix typo --- R/fit.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/fit.R b/R/fit.R index e5d3f6dc4..ca6c5928e 100644 --- a/R/fit.R +++ b/R/fit.R @@ -115,7 +115,7 @@ fit.model_spec <- if (length(possible_engines(object)) == 0) { rlang::abort( glue::glue( - "No engines where loaded for `{class(object)[1]}`.", + "No engines were loaded for `{class(object)[1]}`.", " Please load a parsnip extension package that provides one.", " See https://www.tidymodels.org/find/parsnip/ " )