Reputation: 4179
I have the following function built, which fails with devtools::check() with the following message:
> fast_regression_parsnip_spec_tbl(.parsnip_fns = "linear_reg")
Error in `dplyr::mutate()`:
! Problem while computing `.model_spec = purrr::pmap(dplyr::cur_data(),
~match.fun(..3)(mode = ..2, engine = ..1))`.
Caused by error in `get()`:
! object 'linear_reg' of mode 'function' was not found
Backtrace:
▆
1. ├─tidyaml::fast_regression_parsnip_spec_tbl(.parsnip_fns = "linear_reg")
2. │ └─mod_filtered_tbl %>% ...
3. ├─dplyr::mutate(...)
4. ├─dplyr:::mutate.data.frame(...)
5. │ └─dplyr:::mutate_cols(.data, dplyr_quosures(...), caller_env = caller_env())
6. │ ├─base::withCallingHandlers(...)
7. │ └─mask$eval_all_mutate(quo)
8. ├─purrr::pmap(dplyr::cur_data(), ~match.fun(..3)(mode = ..2, engine = ..1))
9. │ └─tidyaml (local) .f(...)
10. │ └─base::match.fun(..3)
11. │ └─base::get(as.character(FUN), mode = "function", envir = envir)
12. └─base::.handleSimpleError(...)
13. └─dplyr (local) h(simpleError(msg, call))
14. └─rlang::abort(...)
Execution halted
Here is the function:
fast_regression_parsnip_spec_tbl <- function(.parsnip_fns = "all",
.parsnip_eng = "all") {
# Thank you https://stackoverflow.com/questions/74691333/build-a-tibble-of-parsnip-model-calls-with-match-fun/74691529#74691529
# Tidyeval ----
pf <- list(.parsnip_fns) %>%
purrr::flatten_chr()
pe <- list(.parsnip_eng) %>%
purrr::flatten_chr()
# Make tibble
mod_tbl <- dplyr::tibble(
.parsnip_engine = c(
"lm",
"brulee",
"gee",
"glm",
"glmer",
"glmnet",
"gls",
"h2o",
"keras",
"lme",
"lmer",
"spark",
"stan",
"stan_glmer",
"Cubist",
"glm",
"gee",
"glmer",
"glmnet",
"h2o",
"hurdle",
"stan",
"stan_glmer",
"zeroinfl",
"survival",
"flexsurv",
"flexsurvspline"
),
.parsnip_mode = c(
rep("regression", 24),
rep("censored regression", 3)
),
.parsnip_fns = c(
rep("linear_reg", 14),
"cubist_rules",
rep("poisson_reg",9),
rep("survival_reg", 3)
)
)
# Filter ----
if (!"all" %in% pe){
mod_tbl <- mod_tbl %>%
dplyr::filter(.parsnip_engine %in% pe)
}
if (!"all" %in% pf){
mod_tbl <- mod_tbl %>%
dplyr::filter(.parsnip_fns %in% pf)
}
mod_filtered_tbl <- mod_tbl
mod_spec_tbl <- mod_filtered_tbl %>%
dplyr::mutate(
.model_spec = purrr::pmap(
dplyr::cur_data(),
~ match.fun(..3)(mode = ..2, engine = ..1)
)
)
# Return ----
class(mod_spec_tbl) <- c("fst_reg_spec_tbl", class(mod_spec_tbl))
attr(mod_spec_tbl, ".parsnip_engines") <- .parsnip_eng
attr(mod_spec_tbl, ".parsnip_functions") <- .parsnip_fns
return(mod_spec_tbl)
}
Not sure how to proceed with this. I did try to include loadNameSpace(package = "parsnip")
to the function but that did not do what I thought it would.
UPDATE
I changed ~ match.fun...
to ~ get...
not entirely sure why this works so I'm leaving open, as I also here that using get
is sort of hacky and potentially dangerous.
UPDATE
Here is my session info:
> library(tidyaml)
> sessionInfo()
R version 4.2.1 (2022-06-23 ucrt)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 22621)
Matrix products: default
locale:
[1] LC_COLLATE=English_United States.utf8 LC_CTYPE=English_United States.utf8
[3] LC_MONETARY=English_United States.utf8 LC_NUMERIC=C
[5] LC_TIME=English_United States.utf8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] tidyaml_0.0.0.9000
loaded via a namespace (and not attached):
[1] parsnip_1.0.3 rstudioapi_0.14 magrittr_2.0.3 tidyselect_1.2.0 munsell_0.5.0
[6] colorspace_2.0-3 R6_2.5.1 rlang_1.0.6 fansi_1.0.3 dplyr_1.0.10
[11] tools_4.2.1 hardhat_1.2.0 grid_4.2.1 gtable_0.3.1 utf8_1.2.2
[16] cli_3.4.1 DBI_1.1.3 assertthat_0.2.1 tibble_3.1.8 lifecycle_1.0.3
[21] tidyr_1.2.1 purrr_0.3.5 ggplot2_3.4.0 vctrs_0.5.1 glue_1.6.2
[26] compiler_4.2.1 pillar_1.8.1 generics_0.1.3 scales_1.2.1 pkgconfig_2.0.3
Here are the full results of devtools::check()
where match.fun
is implemented.
==> devtools::check()
══ Documenting ═══════════════════════════════════════════════════════════════════════════════════════════
ℹ Updating tidyaml documentation
ℹ Loading tidyaml
══ Building ══════════════════════════════════════════════════════════════════════════════════════════════
Setting env vars:
• CFLAGS : -Wall -pedantic -fdiagnostics-color=always
• CXXFLAGS : -Wall -pedantic -fdiagnostics-color=always
• CXX11FLAGS: -Wall -pedantic -fdiagnostics-color=always
• CXX14FLAGS: -Wall -pedantic -fdiagnostics-color=always
• CXX17FLAGS: -Wall -pedantic -fdiagnostics-color=always
• CXX20FLAGS: -Wall -pedantic -fdiagnostics-color=always
── R CMD build ───────────────────────────────────────────────────────────────────────────────────────────
✔ checking for file 'C:\Users\steve\Documents\GitHub\tidyaml/DESCRIPTION' ...
─ preparing 'tidyaml': (655ms)
✔ checking DESCRIPTION meta-information ...
─ installing the package to build vignettes
✔ creating vignettes (5.6s)
─ checking for LF line-endings in source and make files and shell scripts
─ checking for empty or unneeded directories
─ building 'tidyaml_0.0.0.9000.tar.gz'
══ Checking ══════════════════════════════════════════════════════════════════════════════════════════════
Setting env vars:
• _R_CHECK_CRAN_INCOMING_REMOTE_ : FALSE
• _R_CHECK_CRAN_INCOMING_ : FALSE
• _R_CHECK_FORCE_SUGGESTS_ : FALSE
• _R_CHECK_PACKAGES_USED_IGNORE_UNUSED_IMPORTS_: FALSE
• NOT_CRAN : true
── R CMD check ───────────────────────────────────────────────────────────────────────────────────────────
─ using log directory 'C:/Users/steve/Documents/GitHub/tidyaml.Rcheck'
─ using R version 4.2.1 (2022-06-23 ucrt)
─ using platform: x86_64-w64-mingw32 (64-bit)
─ using session charset: UTF-8
─ using options '--no-manual --as-cran'
✔ checking for file 'tidyaml/DESCRIPTION'
─ this is package 'tidyaml' version '0.0.0.9000'
─ package encoding: UTF-8
✔ checking package namespace information
✔ checking package dependencies (5.2s)
✔ checking if this is a source package ...
✔ checking if there is a namespace
✔ checking for executable files (349ms)
✔ checking for hidden files and directories ...
✔ checking for portable file names
✔ checking serialization versions
✔ checking whether package 'tidyaml' can be installed (3.5s)
✔ checking installed package size ...
✔ checking package directory
✔ checking for future file timestamps ...
✔ checking 'build' directory ...
✔ checking DESCRIPTION meta-information ...
✔ checking top-level files
✔ checking for left-over files ...
✔ checking index information ...
✔ checking package subdirectories ...
✔ checking R files for non-ASCII characters ...
✔ checking R files for syntax errors ...
✔ checking whether the package can be loaded (890ms)
✔ checking whether the package can be loaded with stated dependencies (770ms)
✔ checking whether the package can be unloaded cleanly (773ms)
✔ checking whether the namespace can be loaded with stated dependencies (790ms)
✔ checking whether the namespace can be unloaded cleanly (991ms)
✔ checking loading without being on the library search path (977ms)
✔ checking dependencies in R code (776ms)
✔ checking S3 generic/method consistency (1.2s)
✔ checking replacement functions (768ms)
✔ checking foreign function calls (775ms)
✔ checking R code for possible problems (5.2s)
✔ checking Rd files ...
✔ checking Rd metadata ...
✔ checking Rd line widths ...
✔ checking Rd cross-references ...
✔ checking for missing documentation entries (774ms)
✔ checking for code/documentation mismatches (2.3s)
✔ checking Rd \usage sections (1.4s)
✔ checking Rd contents ...
✔ checking for unstated dependencies in examples ...
✔ checking installed files from 'inst/doc'
✔ checking files in 'vignettes'
E checking examples (2.2s)
Running examples in 'tidyaml-Ex.R' failed
The error most likely occurred in:
> base::assign(".ptime", proc.time(), pos = "CheckExEnv")
> ### Name: fast_regression_parsnip_spec_tbl
> ### Title: Utility Regression call to 'parsnip'
> ### Aliases: fast_regression_parsnip_spec_tbl
>
> ### ** Examples
>
> fast_regression_parsnip_spec_tbl(.parsnip_fns = "linear_reg")
Error in `dplyr::mutate()`:
! Problem while computing `.model_spec = purrr::pmap(dplyr::cur_data(),
~match.fun(..3)(mode = ..2, engine = ..1))`.
Caused by error in `get()`:
! object 'linear_reg' of mode 'function' was not found
Backtrace:
▆
1. ├─tidyaml::fast_regression_parsnip_spec_tbl(.parsnip_fns = "linear_reg")
2. │ └─mod_filtered_tbl %>% ...
3. ├─dplyr::mutate(...)
4. ├─dplyr:::mutate.data.frame(...)
5. │ └─dplyr:::mutate_cols(.data, dplyr_quosures(...), caller_env = caller_env())
6. │ ├─base::withCallingHandlers(...)
7. │ └─mask$eval_all_mutate(quo)
8. ├─purrr::pmap(dplyr::cur_data(), ~match.fun(..3)(mode = ..2, engine = ..1))
9. │ └─tidyaml (local) .f(...)
10. │ └─base::match.fun(..3)
11. │ └─base::get(as.character(FUN), mode = "function", envir = envir)
12. └─base::.handleSimpleError(...)
13. └─dplyr (local) h(simpleError(msg, call))
14. └─rlang::abort(...)
Execution halted
✔ checking for unstated dependencies in vignettes ...
✔ checking package vignettes in 'inst/doc' ...
✔ checking re-building of vignette outputs (1.8s)
✔ checking for non-standard things in the check directory
✔ checking for detritus in the temp directory ...
See
'C:/Users/steve/Documents/GitHub/tidyaml.Rcheck/00check.log'
for details.
── R CMD check results ─────────────────────────────────────────────────────────── tidyaml 0.0.0.9000 ────
Duration: 35.9s
❯ checking examples ... ERROR
Running examples in 'tidyaml-Ex.R' failed
The error most likely occurred in:
> base::assign(".ptime", proc.time(), pos = "CheckExEnv")
> ### Name: fast_regression_parsnip_spec_tbl
> ### Title: Utility Regression call to 'parsnip'
> ### Aliases: fast_regression_parsnip_spec_tbl
>
> ### ** Examples
>
> fast_regression_parsnip_spec_tbl(.parsnip_fns = "linear_reg")
Error in `dplyr::mutate()`:
! Problem while computing `.model_spec = purrr::pmap(dplyr::cur_data(),
~match.fun(..3)(mode = ..2, engine = ..1))`.
Caused by error in `get()`:
! object 'linear_reg' of mode 'function' was not found
Backtrace:
▆
1. ├─tidyaml::fast_regression_parsnip_spec_tbl(.parsnip_fns = "linear_reg")
2. │ └─mod_filtered_tbl %>% ...
3. ├─dplyr::mutate(...)
4. ├─dplyr:::mutate.data.frame(...)
5. │ └─dplyr:::mutate_cols(.data, dplyr_quosures(...), caller_env = caller_env())
6. │ ├─base::withCallingHandlers(...)
7. │ └─mask$eval_all_mutate(quo)
8. ├─purrr::pmap(dplyr::cur_data(), ~match.fun(..3)(mode = ..2, engine = ..1))
9. │ └─tidyaml (local) .f(...)
10. │ └─base::match.fun(..3)
11. │ └─base::get(as.character(FUN), mode = "function", envir = envir)
12. └─base::.handleSimpleError(...)
13. └─dplyr (local) h(simpleError(msg, call))
14. └─rlang::abort(...)
Execution halted
1 error ✖ | 0 warnings ✔ | 0 notes ✔
Error: R CMD check found ERRORs
Execution halted
Exited with status 1.
parsn
#~ get(..3)(mode = ..2, engine = ..1)
Upvotes: 0
Views: 36