Including caret in another package gives error during devtools::check() - "there is no package called 'lattice'"

I am trying to include caret in a package that I am developing. When I run devtools::check(), I get an error "there is no package called 'lattice'". If I remove caret from the "Imports" section of the DESCRIPTION file, the error goes away. I am not sure what is causing this issue. Lattice is installed on my machine.

I don't know how to provide a reproducible example since the package is in development so I have included a version of my package here. If it helps, my DESCRIPTION file (without caret) looks like this

Package: tswgewrapped
Title: Helpful wrappers for 'tswge', 'vars' and 'nnfor' time series packages
Version: 1.8.10
Authors@R: c(
    person("David", "Josephs", email = "josephsd@smu.edu", role = c("aut", "cre")),
    person("Nikhil", "Gupta", email = "guptan@smu.edu", role = c("aut")))
Description: This package provides several helpful wrappers for the already useful 'tswge', 'vars' and 'nnfor' package. In the future, this package intends to move away from the tswge backend, to be faster, with more readable source code.
License: AGPL-3
Encoding: UTF-8
LazyData: true
Imports: 
    assertr,
    doParallel,
    dplyr,
    ggfortify,
    GGally,
    ggplot2,
    magrittr,
    nnfor,
    rlang,
    pander,
    parallel,
    patchwork,
    purrr,
    R6,
    RColorBrewer,
    Rfast,
    tibble,
    tictoc,
    tswge,
    vars,
    forecast
RoxygenNote: 7.1.0
Suggests: 
    testthat (>= 2.1.0),
    tseries,
    knitr,
    rmarkdown
VignetteBuilder: knitr

Here is my sessionInfo

> sessionInfo()
R version 3.5.1 (2018-07-02)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)

Matrix products: default

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252    LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C                           LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] tswgewrapped_1.8.10 caret_6.0-84        ggplot2_3.3.0       lattice_0.20-41    

loaded via a namespace (and not attached):
  [1] colorspace_1.4-1    class_7.3-15        rprojroot_1.3-2     fs_1.3.1            rstudioapi_0.10     roxygen2_7.1.0     
  [7] remotes_2.1.0       smooth_2.5.5        lubridate_1.7.4     prodlim_2018.04.18  xml2_1.2.0          splines_3.5.1      
 [13] codetools_0.2-16    doParallel_1.0.14   knitr_1.23          pkgload_1.0.2       greybox_0.5.8       nloptr_1.2.1       
 [19] compiler_3.5.1      tictoc_1.0          backports_1.1.4     assertthat_0.2.1    RcppZiggurat_0.1.5  Matrix_1.2-17      
 [25] strucchange_1.5-2   cli_1.1.0           prettyunits_1.0.2   tools_3.5.1         gtable_0.3.0        glue_1.3.1         
 [31] reshape2_1.4.3      dplyr_0.8.5         Rcpp_1.0.1          fracdiff_1.4-2      xopen_1.0.0         lamW_1.3.0         
 [37] urca_1.3-0          tswge_1.0.0         nlme_3.1-137        iterators_1.0.10    vars_1.5-3          lmtest_0.9-37      
 [43] timeDate_3043.102   gower_0.2.1         xfun_0.8            stringr_1.4.0       ps_1.3.0            testthat_2.1.1     
 [49] devtools_2.1.0      statmod_1.4.33      MASS_7.3-51.4       zoo_1.8-6           scales_1.0.0        ipred_0.9-9        
 [55] parallel_3.5.1      sandwich_2.5-1      RColorBrewer_1.1-2  yaml_2.2.0          quantmod_0.4-15     curl_3.3           
 [61] memoise_1.1.0       gridExtra_2.3       pander_0.6.3        rcmdcheck_1.3.3     rpart_4.1-15        reshape_0.8.8      
 [67] stringi_1.4.3       tseries_0.10-47     desc_1.2.0          foreach_1.4.4       TTR_0.23-4          pkgbuild_1.0.3     
 [73] lava_1.6.5          rlang_0.4.2         pkgconfig_2.0.2     purrr_0.3.3         nnfor_0.9.6         recipes_0.1.6      
 [79] patchwork_1.0.0     Rfast_1.9.9         processx_3.4.1      tidyselect_0.2.5    GGally_1.5.0        plyr_1.8.4         
 [85] magrittr_1.5        R6_2.4.0            generics_0.0.2      pillar_1.4.2        withr_2.1.2         xts_0.11-2         
 [91] survival_2.44-1.1   nnet_7.3-12         ggfortify_0.4.8     tibble_2.1.3        crayon_1.3.4        usethis_1.5.1      
 [97] grid_3.5.1          data.table_1.12.2   callr_3.3.1         ModelMetrics_1.2.2  forecast_8.9        digest_0.6.20      
[103] MAPA_2.0.4          assertr_2.7         tidyr_0.8.3         numDeriv_2016.8-1.1 tsutils_0.9.2       stats4_3.5.1       
[109] RcppParallel_4.4.3  munsell_0.5.0       sessioninfo_1.1.1   quadprog_1.5-7

I'm definitely not a packager, but looking at latticeExtra source might be informative.

I am not sure that helps. This is the latticeExtra package and my error is related to lattice. I think caret depends on lattice and when I include that in my Imports section of the DESCRIPTION file, it gives an error since it is not able to load the lattice package for some reason (I am not able to figure out what that reason is).

It is interesting since if I leave our 'caretc from the Imports section and then build the package, it works fine when the package is installed as long as I call

library(caret)

before calling the functions in my package that depend on 'caret'. So it does not seem to be an issue with missing lattice package. Just seems like a peculiar issue with the way the package is being built.

I again succeeded in sowing confusion. My suggestion was only to see how latticeExtra, which also depends on lattice, handled the imports. More speculation: putting caret first should load many of the required dependencies into the name space, but not attached. A definite FWIW

Thank you. You never know when the responses will be useful for someone.

I have tried changing the location of caret in the imports but it does not help. By the way, I was having a similar issue with the forecast package and for that it helped to move it to the end. See my other open post here: Order of libraries in the Imports sectiion of DESCRIPTION file

1 Like

Could you please show the full output from devtools::check()? I wasn't able to replicate the error.

I created a new directory that contained the following DESCRIPTION file. Note that it includes caret in the Imports.

Package: tswgewrapped
Title: Helpful wrappers for 'tswge', 'vars' and 'nnfor' time series packages
Version: 1.8.10
Authors@R: c(
    person("David", "Josephs", email = "josephsd@smu.edu", role = c("aut", "cre")),
    person("Nikhil", "Gupta", email = "guptan@smu.edu", role = c("aut")))
Description: This package provides several helpful wrappers for the already useful 'tswge', 'vars' and 'nnfor' package. In the future, this package intends to move away from the tswge backend, to be faster, with more readable source code.
License: AGPL-3
Encoding: UTF-8
LazyData: true
Imports: 
    assertr,
    caret,
    doParallel,
    dplyr,
    ggfortify,
    GGally,
    ggplot2,
    magrittr,
    nnfor,
    rlang,
    pander,
    parallel,
    patchwork,
    purrr,
    R6,
    RColorBrewer,
    Rfast,
    tibble,
    tictoc,
    tswge,
    vars,
    forecast
RoxygenNote: 7.1.0
Suggests: 
    testthat (>= 2.1.0),
    tseries,
    knitr,
    rmarkdown
VignetteBuilder: knitr

I am able to run devtools::check():

> devtools::check()
Updating tswgewrapped documentation
First time using roxygen2. Upgrading automatically...
Loading tswgewrapped
Writing NAMESPACE
-- Building ---------------------------------------------------- tswgewrapped --
Setting env vars:
* CFLAGS    : -Wall -pedantic
* CXXFLAGS  : -Wall -pedantic
* CXX11FLAGS: -Wall -pedantic
--------------------------------------------------------------------------------
√  checking for file 'C:\Users\BLISCJX\Documents\test/DESCRIPTION' (685ms)
-  preparing 'tswgewrapped':
√  checking DESCRIPTION meta-information ... 
-  checking for LF line-endings in source and make files and shell scripts
-  checking for empty or unneeded directories
   Removed empty directory 'tswgewrapped/man'
-  building 'tswgewrapped_1.8.10.tar.gz'
   
-- Checking ---------------------------------------------------- tswgewrapped --
Setting env vars:
* _R_CHECK_CRAN_INCOMING_REMOTE_: FALSE
* _R_CHECK_CRAN_INCOMING_       : FALSE
* _R_CHECK_FORCE_SUGGESTS_      : FALSE
* NOT_CRAN                      : true
-- R CMD check ----------------------------------------------------------------------
-  using log directory 'C:/Users/BLISCJX/AppData/Local/Temp/RtmpY1lTOQ/tswgewrapped.Rcheck' (727ms)
-  using R version 3.6.3 (2020-02-29)
-  using platform: x86_64-w64-mingw32 (64-bit)
-  using session charset: ISO8859-1
-  using options '--no-manual --as-cran'
√  checking for file 'tswgewrapped/DESCRIPTION' ... 
-  this is package 'tswgewrapped' version '1.8.10'
-  package encoding: UTF-8
√  checking package namespace information ... 
√  checking package dependencies (1.3s)
√  checking if this is a source package ...
√  checking if there is a namespace
√  checking for .dll and .exe files
√  checking for hidden files and directories ...
√  checking for portable file names ...
√  checking serialization versions ... 
√  checking whether package 'tswgewrapped' can be installed (4.6s)
√  checking package directory (1.5s)
√  checking for future file timestamps (426ms)
√  checking DESCRIPTION meta-information (1s)
√  checking top-level files ...
√  checking for left-over files
√  checking index information
√  checking package subdirectories (338ms)
√  checking whether the package can be loaded (525ms)
√  checking whether the package can be loaded with stated dependencies (335ms)
√  checking whether the package can be unloaded cleanly (366ms)
√  checking whether the namespace can be loaded with stated dependencies (343ms)
√  checking whether the namespace can be unloaded cleanly (552ms)
√  checking loading without being on the library search path (1.3s)
-  checking examples ... NONE (481ms)
√  checking for detritus in the temp directory
   
   
-- R CMD check results ------------------------------------- tswgewrapped 1.8.10 ----
Duration: 15.3s

0 errors √ | 0 warnings √ | 0 notes √

And here is my session information:

> sessionInfo()
R version 3.6.3 (2020-02-29)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 18362)

Matrix products: default

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] tswgewrapped_1.8.10

loaded via a namespace (and not attached):
  [1] colorspace_1.4-1     ellipsis_0.3.0       class_7.3-15        
  [4] rprojroot_1.3-2      fs_1.3.2             rstudioapi_0.11     
  [7] roxygen2_7.1.0       remotes_2.1.1        smooth_2.5.5        
 [10] prodlim_2019.11.13   fansi_0.4.1          lubridate_1.7.4     
 [13] xml2_1.2.5           codetools_0.2-16     splines_3.6.3       
 [16] doParallel_1.0.15    knitr_1.28           pkgload_1.0.2       
 [19] greybox_0.5.9        nloptr_1.2.2.1       pROC_1.16.2         
 [22] caret_6.0-86         compiler_3.6.3       tictoc_1.0          
 [25] backports_1.1.5      assertthat_0.2.1     RcppZiggurat_0.1.5  
 [28] Matrix_1.2-18        strucchange_1.5-2    cli_2.0.2           
 [31] prettyunits_1.1.1    tools_3.6.3          gtable_0.3.0        
 [34] glue_1.3.1           reshape2_1.4.3       dplyr_0.8.5         
 [37] Rcpp_1.0.3           xopen_1.0.0          fracdiff_1.5-1      
 [40] vctrs_0.2.4          lamW_1.3.0           urca_1.3-0          
 [43] tswge_1.0.0          nlme_3.1-144         vars_1.5-3          
 [46] iterators_1.0.12     lmtest_0.9-37        timeDate_3043.102   
 [49] gower_0.2.1          xfun_0.12            stringr_1.4.0       
 [52] ps_1.3.2             testthat_2.3.2       lifecycle_0.2.0     
 [55] devtools_2.2.2       statmod_1.4.34       MASS_7.3-51.5       
 [58] zoo_1.8-7            scales_1.1.0         ipred_0.9-9         
 [61] sandwich_2.5-1       parallel_3.6.3       RColorBrewer_1.1-2  
 [64] quantmod_0.4.17      curl_4.3             memoise_1.1.0       
 [67] gridExtra_2.3        ggplot2_3.3.0        pander_0.6.3        
 [70] rcmdcheck_1.3.3      rpart_4.1-15         reshape_0.8.8       
 [73] stringi_1.4.6        tseries_0.10-47      desc_1.2.0          
 [76] foreach_1.5.0        TTR_0.23-6           pkgbuild_1.0.6      
 [79] lava_1.6.7           rlang_0.4.5          pkgconfig_2.0.3     
 [82] pracma_2.2.9         lattice_0.20-40      purrr_0.3.3         
 [85] nnfor_0.9.6          recipes_0.1.10       patchwork_1.0.0     
 [88] Rfast_1.9.9          processx_3.4.2       tidyselect_1.0.0    
 [91] GGally_1.4.0         plyr_1.8.6           magrittr_1.5        
 [94] R6_2.4.1             generics_0.0.2       pillar_1.4.3        
 [97] withr_2.1.2          xts_0.12-0           survival_3.1-11     
[100] nnet_7.3-13          ggfortify_0.4.9      tibble_2.1.3        
[103] crayon_1.3.4         usethis_1.5.1        grid_3.6.3          
[106] data.table_1.12.8    callr_3.4.2          ModelMetrics_1.2.2.2
[109] forecast_8.12        digest_0.6.25        MAPA_2.0.4          
[112] assertr_2.7          tidyr_1.0.2          tsutils_0.9.2       
[115] RcppParallel_5.0.0   stats4_3.6.3         munsell_0.5.0       
[118] sessioninfo_1.1.1    quadprog_1.5-8  

@jdblischak -- I finally figured out the solution to my issue.

Solution 1

I had installed R on my new compute more than a year ago and hence was using version 3.5.1. For some reason (you can see my my SessionInfo), caret and lattice were showing up under other attached packages and not under loaded via a namespace (and not attached).

I also noticed that if I place caret in the my package namespace, then the installation part of the devtools::check() went though without any issue, but the process complained about lattice during the unit tests section.

So the temporary solution that I found was to install lattice and the forecast packages in the unit test setup section (testthat.R). This does not seem like a clean solution but it worked. You can see that here - version 1.8.10.8 of the package.

if(!require("lattice")){
  # https://github.com/topepo/caret/issues/411#issuecomment-209973908
  install.packages("lattice", repos = "http://cran.us.r-project.org", dependencies = c("Depends", "Imports", "Suggests"))
}

if(!require("forecast")){
  # https://github.com/topepo/caret/issues/411#issuecomment-209973908
  install.packages("forecast", repos = "http://cran.us.r-project.org", dependencies = c("Depends", "Imports", "Suggests"))
}

Solution 2

Yesterday, I upgraded to the latest version of R (3.6.3) and installed all the packages again. Now you can see from my SessionInfo that caret and lattice correctly show up under the loaded via a namespace (and not attached) section.

And now, everything works fine with devtools::check() even if I remove the lattice and forecast package installation from the unit test setup section. So I believe there was some issue with the older version of R and how it was interacting with my setup.

> sessionInfo()
R version 3.6.3 (2020-02-29)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 17763)

Matrix products: default

Random number generation:
 RNG:     Mersenne-Twister 
 Normal:  Inversion 
 Sample:  Rounding 
 
locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252    LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C                           LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] tswgewrapped_1.8.10.9

loaded via a namespace (and not attached):
  [1] colorspace_1.4-1     ellipsis_0.3.0       class_7.3-15         rprojroot_1.3-2      fs_1.4.1             rstudioapi_0.11     
  [7] roxygen2_7.1.0       remotes_2.1.1        smooth_2.5.6         prodlim_2019.11.13   fansi_0.4.1          lubridate_1.7.8     
 [13] xml2_1.3.1           codetools_0.2-16     splines_3.6.3        doParallel_1.0.15    knitr_1.28           pkgload_1.0.2       
 [19] greybox_0.5.9        nloptr_1.2.2.1       pROC_1.16.2          caret_6.0-86         compiler_3.6.3       tictoc_1.0          
 [25] backports_1.1.6      assertthat_0.2.1     RcppZiggurat_0.1.5   Matrix_1.2-18        strucchange_1.5-2    cli_2.0.2           
 [31] prettyunits_1.1.1    tools_3.6.3          gtable_0.3.0         glue_1.4.0           reshape2_1.4.4       dplyr_0.8.5         
 [37] Rcpp_1.0.4.6         xopen_1.0.0          fracdiff_1.5-1       vctrs_0.2.4          lamW_1.3.0           urca_1.3-0          
 [43] tswge_1.0.0          nlme_3.1-144         iterators_1.0.12     vars_1.5-3           lmtest_0.9-37        timeDate_3043.102   
 [49] gower_0.2.1          xfun_0.13            stringr_1.4.0        ps_1.3.2             testthat_2.3.2       lifecycle_0.2.0     
 [55] devtools_2.3.0       statmod_1.4.34       MASS_7.3-51.5        zoo_1.8-7            scales_1.1.0         ipred_0.9-9         
 [61] parallel_3.6.3       sandwich_2.5-1       RColorBrewer_1.1-2   quantmod_0.4.17      curl_4.3             memoise_1.1.0       
 [67] gridExtra_2.3        ggplot2_3.3.0        pander_0.6.3         rcmdcheck_1.3.3      rpart_4.1-15         reshape_0.8.8       
 [73] stringi_1.4.6        tseries_0.10-47      desc_1.2.0           foreach_1.5.0        TTR_0.23-6           pkgbuild_1.0.6      
 [79] lava_1.6.7           rlang_0.4.5          pkgconfig_2.0.3      pracma_2.2.9         lattice_0.20-38      purrr_0.3.4         
 [85] nnfor_0.9.6          recipes_0.1.10       patchwork_1.0.0      Rfast_1.9.9          processx_3.4.2       tidyselect_1.0.0    
 [91] GGally_1.5.0         plyr_1.8.6           magrittr_1.5         R6_2.4.1             generics_0.0.2       pillar_1.4.3        
 [97] withr_2.1.2          xts_0.12-0           survival_3.1-8       nnet_7.3-12          ggfortify_0.4.9      tibble_3.0.0        
[103] crayon_1.3.4         usethis_1.6.0        grid_3.6.3           data.table_1.12.8    callr_3.4.3          ModelMetrics_1.2.2.2
[109] forecast_8.12        digest_0.6.25        MAPA_2.0.4           assertr_2.7          tidyr_1.0.2          tsutils_0.9.2       
[115] RcppParallel_5.0.0   stats4_3.6.3         munsell_0.5.0        sessioninfo_1.1.1    quadprog_1.5-8      

I hope this will be helpful for future readers. Lesson learned is to not be too out of sync with the latest version of the tool and packages.

2 Likes

Great! Please mark your answer as the solution for the benefit of those to follow.

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.