如何在编写包时指定依赖项?

时间:2016-05-17 17:36:17

标签: r roxygen2

我正在尝试编写一个包含某些依赖项的包。我可以使用library()手动加载依赖项,但我希望它们能够与我的软件包一起自动加载。 我认为Imports文件中的DESCRIPTION属性可以用于工作,但它对我不起作用。

所以我从头开始用一个全新的会话:

sessionInfo()

R version 3.3.0 (2016-05-03)
Platform: x86_64-apple-darwin13.4.0 (64-bit)
Running under: OS X 10.11.4 (El Capitan)

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

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

loaded via a namespace (and not attached):
[1] tools_3.3.0

然后我加载我导入的包

Imports:
 dplyr,
 zipcode,
 readxl,
 mosaic

实际上再次查看我的会话,我为mypackage_0.1.0指定的依赖项被正确加载:

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

other attached packages:
[1] mypackage_0.1.0

loaded via a namespace (and not attached):
 [1] Rcpp_0.12.4        nloptr_1.0.4       plyr_1.8.3         tools_3.3.0        mosaic_0.13.0      testthat_1.0.2     digest_0.6.9      
 [8] lme4_1.1-12        zipcode_1.0        memoise_1.0.0      gtable_0.2.0       nlme_3.1-127       lattice_0.20-33    mgcv_1.8-12       
[15] Matrix_1.2-6       DBI_0.4-1          parallel_3.3.0     SparseM_1.7        ggdendro_0.1-20    gridExtra_2.2.1    withr_1.0.1       
[22] dplyr_0.4.3        stringr_1.0.0      roxygen2_5.0.1     MatrixModels_0.4-1 devtools_1.11.1    grid_3.3.0         nnet_7.3-12       
[29] R6_2.1.2           readxl_0.1.1       mosaicData_0.13.0  minqa_1.2.4        reshape2_1.4.1     ggplot2_2.1.0      car_2.1-2         
[36] magrittr_1.5       scales_0.4.0       splines_3.3.0      MASS_7.3-45        assertthat_0.1     pbkrtest_0.4-6     colorspace_1.2-6  
[43] quantreg_5.21      stringi_1.0-1      munsell_0.4.3      crayon_1.3.1  

但是,每当我编写一个函数,嵌套来自任何"加载的通过命名空间"包,我收到一个错误。例如:

f  <- function(x) {tbl_df(x)}    
> f(cars)
Error in f(cars) : could not find function "tbl_df"

我认为问题在于依赖项中的函数只能在我正在编写的包的其他函数中使用。但是,当我将f()定义为我的包的新功能时,我得到了同样的错误。

我被建议仔细检查NAMESPACE文件是否已保存并重新加载。

这是我的NAMESPACE文件,带有f()功能。

# Generated by roxygen2: do not edit by hand

export(chain_spreadsheet)
export(f)
export(mapping)
export(stalary)

但是,即使重新生成文档并重新加载包,我仍然遇到同样的问题。

1 个答案:

答案 0 :(得分:2)

您还需要在NAMESPACE文件中包含import语句。要自动完成roxygen2,您需要使用@import方法。

例如,在任何.R文件中

foo.R

#' @import dplyr

# my other code
...

现在,当您使用roxygen2重建时,NAMESPACE将自动更新。这就是为什么它表示“不要手动编辑”,因为roxygen2应该照顾所有这些。您只需要使用必要的功能。