假设我维护两个包,分别称为foo
和bar
。 bar
导出一个函数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 文件。 我在这里错过了什么吗? 或者这是一个错误?
谢谢!
您使用的是最新版本的 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/
最有用的评论
删除命名空间文件并执行 load_all(),然后执行 devtools::docuement()。 它应该做的工作。