Devtools: @importFrom 更改时命名空间不会删除旧信息

创建于 2014-01-03  ·  8评论  ·  资料来源: r-lib/devtools

假设我维护两个包,分别称为foobarbar导出一个函数baz并且foo使用@importFrom将它导入到 help.R 文件中,即在 foo/R/help.R 中有一行<strong i="11">@importFrom</strong> bar baz 。 当我document时,名称空间文件已正确创建,因此它具有importFrom(bar,baz)

现在假设,我在bar包中将 $ baz的名称更改为bash 。 我将 foo/R/help.R 更新为<strong i="19">@importFrom</strong> bar bash 。 但是,当我document时,命名空间正确地添加了importFrom(bar,bash)但它不会删除importFrom(bar,baz)所以我在运行install时遇到错误。

我正在使用clean = TRUE参数,认为它也可以清除它,但似乎这只适用于 man 文件。 我在这里错过了什么吗? 或者这是一个错误?

谢谢!

最有用的评论

删除命名空间文件并执行 load_all(),然后执行 devtools::docuement()。 它应该做的工作。

所有8条评论

您使用的是最新版本的 roxygen2 吗? 它应该每次都从头开始重新创建 NAMESPACE 文件。

是的,我使用的是 roxygen2 v3.0.0

会话信息()
R 版本 3.0.2 (2013-09-25)
平台:x86_64-apple-darwin10.8.0(64位)

语言环境:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

附加的基础包:
[1] 统计图形数据集 grDevices utils 方法库

其他附加包:
[1] plyr_1.8 ...
extrafont_0.15
[25] roxygen2_3.0.0 testthat_0.7.1
[27] 开发工具_1.4.1

通过命名空间加载(未附加):
[1] biglm_0.9-1 boot_1.3-9 brew_1.0-6 cluster_1.14.4 codetools_0.2-8
[6] colorspace_1.2-4 corrplot_0.73 data.table_1.8.10 dichromat_2.0-0 digest_0.6.4
[11] evaluate_0.5.1 extrafontdb_1.0 formatR_0.10 Formula_1.1-1 ggplot2_0.9.3.1
[16] gmp_0.5-11 grid_3.0.2 gtable_0.1.2 Hmisc_3.13-0 httr_0.2
[21] knitr_1.5 labeling_0.2 lattice_0.20-24 lubridate_1.3.3 MASS_7.3-29
[26] memoise_0.1 munsell_0.4.2 parallel_3.0.2 proto_0.3-10 R.cache_0.9.0
[31] R.methodsS3_1.5.2 R.oo_1.15.8 R.utils_1.28.4 RColorBrewer_1.0-5 RCurl_1.95-4.1
[36] reshape2_1.2.2 rjson_0.2.13 Rttf2pt1_1.2 scales_0.2.3 splines_3.0.2
[41] stringr_0.6.2 生存_2.37-4 工具_3.0.2 晶须_0.3-2 xtable_1.7-1

你确定你在别处没有其他<strong i="5">@importFrom</strong> x y吗?

没有什么明显的,但似乎我必须在我没想到的地方留下一些挥之不去的东西。 我会继续寻找; 很抱歉打扰了。

我重新打开这个问题是因为我已经能够创建一个产生与@importFrom相关的错误的 MWE(尽管我不完全确定与我的原始帖子相关)。

我用准系统文件构建了一个骨架包,只编辑了help.R文件,非常简单:

#' <strong i="9">@docType</strong> package
#'
#' <strong i="10">@importFrom</strong> plyr ddply
NULL

当我调用document(package_directory, clean = TRUE) (其中package_directory是一个保存包路径的变量)时,一切正常。 现在,我将help.R更改为:

#' <strong i="17">@docType</strong> package
#'
#' <strong i="18">@importFrom</strong> plyr
NULL

并调用document(package_directory, clean = TRUE) ,这会导致错误,如预期的那样:

Error in asChar(ivars) : 
  empty name in directive 'importFrom' in 'NAMESPACE' file

现在,让我们返回并修复help.R使其恢复原状:

#' <strong i="27">@docType</strong> package
#'
#' <strong i="28">@importFrom</strong> plyr ddply
NULL

当我调用document(package_directory, clean = TRUE)时,令人惊讶的是,我仍然得到了打破help.R时遇到的错误。 我原以为它会在这里工作得很好,因为document忽略了NAMESPACE文件。

另一个转折是,如果不是在破坏事物后使用document ,而是使用roxygenize ,它可以正常工作。

根据roxygen文档,“如果你有一个简单的包,你可以使用roxygenise() ,但对于更复杂的东西,我建议你使用document() 。” 那么,为什么document在这里不起作用而roxygenize在这里起作用呢? 什么时候应该使用它们?

至于版本,我是最新的:

> sessionInfo()
R version 3.0.3 (2014-03-06)
Platform: x86_64-apple-darwin10.8.0 (64-bit)

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  datasets  grDevices utils     methods   base     

other attached packages:
[1] plyr_1.8.1     extrafont_0.16 roxygen2_3.1.0 testthat_0.8.1 devtools_1.4.1

啊,问题是document()首先需要运行load_all()来加载包,一旦你破坏了命名空间,就无法加载它。 在这种情况下,我通常只是撤消 git 中的更改。

删除命名空间文件并执行 load_all(),然后执行 devtools::docuement()。 它应该做的工作。

这个老问题已被自动锁定。 如果您认为您发现了相关问题,请提交一个新问题(使用 reprex)并链接到该问题。 https://reprex.tidyverse.org/

此页面是否有帮助?
0 / 5 - 0 等级