diff --git a/DESCRIPTION b/DESCRIPTION index db8997813..2369e2752 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,5 +1,5 @@ Package: parsnip -Version: 0.1.5.9001 +Version: 0.1.5.9002 Title: A Common API to Modeling and Analysis Functions Description: A common interface is provided to allow users to specify a model without having to remember the different argument names across different functions or computational engines (e.g. 'R', 'Spark', 'Stan', etc). Authors@R: c( diff --git a/NAMESPACE b/NAMESPACE index 3add59c11..12635ce74 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -62,6 +62,8 @@ S3method(print,svm_poly) S3method(print,svm_rbf) S3method(req_pkgs,model_fit) S3method(req_pkgs,model_spec) +S3method(required_pkgs,model_fit) +S3method(required_pkgs,model_spec) S3method(tidy,"_elnet") S3method(tidy,"_fishnet") S3method(tidy,"_lognet") @@ -175,6 +177,7 @@ export(prepare_data) export(rand_forest) export(repair_call) export(req_pkgs) +export(required_pkgs) export(rpart_train) export(set_args) export(set_dependency) @@ -228,6 +231,7 @@ importFrom(generics,augment) importFrom(generics,fit) importFrom(generics,fit_xy) importFrom(generics,glance) +importFrom(generics,required_pkgs) importFrom(generics,tidy) importFrom(generics,varying_args) importFrom(glue,glue_collapse) diff --git a/NEWS.md b/NEWS.md index 904661331..6aa313a8c 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,5 +1,7 @@ # parsnip (development version) +* `generics::required_pkgs()` was extended for `parsnip` objects. + * The `liquidSVM` engine for `svm_rbf()` was deprecated due to that package's removal from CRAN. (#425) * A new linear SVM model `svm_linear()` is now available with the `LiblineaR` engine (#424) and the `kernlab` engine (#438), and the `LiblineaR` engine is available for `logistic_reg()` as well (#429). diff --git a/R/reexports.R b/R/reexports.R index 66ef66ee4..c6fa3d9f3 100644 --- a/R/reexports.R +++ b/R/reexports.R @@ -22,3 +22,7 @@ generics::glance #' @importFrom generics augment #' @export generics::augment + +#' @importFrom generics required_pkgs +#' @export +generics::required_pkgs diff --git a/R/req_pkgs.R b/R/req_pkgs.R index 25c5ce509..c09c46c57 100644 --- a/R/req_pkgs.R +++ b/R/req_pkgs.R @@ -4,9 +4,9 @@ #' @param ... Not used. #' @return A character string of package names (if any). #' @details -#' For a model specification, the engine must be set. -#' -#' The list does not include the `parsnip` package. +#' For a model specification, the engine must be set. The list produced by +#' `req_pkgs()`does not include the `parsnip` package while `required_pkgs()` +#' does. #' @examples #' should_fail <- try(req_pkgs(linear_reg()), silent = TRUE) #' should_fail @@ -51,3 +51,16 @@ get_pkgs <- function(x) { res } +#' @export +#' @rdname req_pkgs +required_pkgs.model_spec <- function(x, ...) { + res <- req_pkgs.model_spec(x, ...) + sort(unique(c("parsnip", res))) +} + +#' @export +#' @rdname req_pkgs +required_pkgs.model_fit <- function(x, ...) { + res <- req_pkgs.model_fit(x, ...) + sort(unique(c("parsnip", res))) +} diff --git a/R/zzz.R b/R/zzz.R index 0b64ba244..45e05ea90 100644 --- a/R/zzz.R +++ b/R/zzz.R @@ -9,6 +9,8 @@ s3_register("generics::tidy", "_fishnet") s3_register("generics::glance", "model_fit") s3_register("generics::augment", "model_fit") + s3_register("generics::required_pkgs", "model_fit") + s3_register("generics::required_pkgs", "model_spec") } diff --git a/man/reexports.Rd b/man/reexports.Rd index 0b6f48863..614b0b3b9 100644 --- a/man/reexports.Rd +++ b/man/reexports.Rd @@ -9,6 +9,7 @@ \alias{tidy} \alias{glance} \alias{augment} +\alias{required_pkgs} \alias{varying_args} \title{Objects exported from other packages} \keyword{internal} @@ -17,7 +18,7 @@ These objects are imported from other packages. Follow the links below to see their documentation. \describe{ - \item{generics}{\code{\link[generics]{augment}}, \code{\link[generics]{fit}}, \code{\link[generics]{fit_xy}}, \code{\link[generics]{glance}}, \code{\link[generics]{tidy}}, \code{\link[generics]{varying_args}}} + \item{generics}{\code{\link[generics]{augment}}, \code{\link[generics]{fit}}, \code{\link[generics]{fit_xy}}, \code{\link[generics]{glance}}, \code{\link[generics]{required_pkgs}}, \code{\link[generics]{tidy}}, \code{\link[generics]{varying_args}}} \item{magrittr}{\code{\link[magrittr:pipe]{\%>\%}}} }} diff --git a/man/req_pkgs.Rd b/man/req_pkgs.Rd index 790da1087..59a3178e6 100644 --- a/man/req_pkgs.Rd +++ b/man/req_pkgs.Rd @@ -4,6 +4,8 @@ \alias{req_pkgs} \alias{req_pkgs.model_spec} \alias{req_pkgs.model_fit} +\alias{required_pkgs.model_spec} +\alias{required_pkgs.model_fit} \title{Determine required packages for a model} \usage{ req_pkgs(x, ...) @@ -11,6 +13,10 @@ req_pkgs(x, ...) \method{req_pkgs}{model_spec}(x, ...) \method{req_pkgs}{model_fit}(x, ...) + +\method{required_pkgs}{model_spec}(x, ...) + +\method{required_pkgs}{model_fit}(x, ...) } \arguments{ \item{x}{A model specification or fit.} @@ -24,9 +30,9 @@ A character string of package names (if any). Determine required packages for a model } \details{ -For a model specification, the engine must be set. - -The list does not include the \code{parsnip} package. +For a model specification, the engine must be set. The list produced by +\code{req_pkgs()}does not include the \code{parsnip} package while \code{required_pkgs()} +does. } \examples{ should_fail <- try(req_pkgs(linear_reg()), silent = TRUE) diff --git a/tests/testthat/test_packages.R b/tests/testthat/test_packages.R index d4e951b78..5dd1c7ad7 100644 --- a/tests/testthat/test_packages.R +++ b/tests/testthat/test_packages.R @@ -7,19 +7,21 @@ load(test_path("mars_model.RData")) test_that('required packages', { expect_error(req_pkgs(linear_reg()), "Please set an engine") + expect_error(required_pkgs(linear_reg()), "Please set an engine") glmn <- linear_reg() %>% - set_engine("glmnet") %>% - req_pkgs() - expect_equal(glmn, "glmnet") + set_engine("glmnet") + expect_equal(req_pkgs(glmn), "glmnet") + expect_equal(required_pkgs(glmn), c("glmnet", "parsnip")) + lm_fit <- linear_reg() %>% set_engine("lm") %>% - fit(mpg ~ ., data = mtcars) %>% - req_pkgs() - expect_equal(lm_fit, "stats") + fit(mpg ~ ., data = mtcars) + expect_equal(req_pkgs(lm_fit), "stats") + expect_equal(required_pkgs(lm_fit), c("parsnip", "stats")) }) # ------------------------------------------------------------------------------