2

我正在开发一个 R 包pk,比如说。run_examples我已经成功安装并使用了它,现在我正在尝试借助包中的函数来清理示例devtools。但是,它在第​​一个示例中崩溃:

> require(pk)
> require(devtools)
> run_examples("~/[full path]/pk")
Updating pk documentation
Running 45 example files in pk
--------------------------------------------------------------------------------
Loading pk
Running examples in pk-package.Rd
--------------------------------------------------------------------------------

1> ########################################################################
1> ## Simulate a dataset ... blah blah
1> set.seed(1)
1> x = my_pk_fun(a = 1)
Error in eval(expr, envir, enclos) : could not find function "my_pk_fun"
Loading pk

由于我已经加载了我的包(使用require),我还需要做什么才能使其my_pk_fun可见run_examples?我已经检查过my_pk_fun它确实存在于我的 R 会话中。

更新: 根据 Dirk 的评论,我检查了我的命名空间文件,发现它完全是空的。正如文档所建议(尽管不推荐) ,我插入exportPattern("^[^\\.]")了 ,它似乎应该导出所有功能,包括my_pk_fun. 然而,在重复上面的实验后,(a)我得到了同样的错误,并且(b)命名空间文件的内容被删除了!为什么run_examples清空我的命名空间文件?

4

1 回答 1

0

我推测我自己的问题的解决方案:

我省略的一个细节是,在我可以run_examples做任何事情之前,它要求我首先安装roxygen2包(即使roxygen2仅在devtools文档中的“建议”下列出!)。

在挖掘 的源代码时run_examples,我确实发现了roxygenize. 之前已经注意到,对包进行 roxygenizing 可以具有重写NAMESPACE文件的效果。

明确地说,run_examples清空我的NAMESPACE文件的原因是(1)run_examplesroxygenized 我的包,而(2)我从未# @export在我的源文件中包含任何命令(或任何其他 roxygen2-speak,就此而言)。

结论:除非您在roxygen2框架内构建包,并且将所有.Rd文档作为注释包含在源代码中,否则不要使用run_examples! run_examples文档中似乎应该对此有警告。

一条出路: 如果你真的必须使用run_examples,并且你愿意学习一点roxygen,这实际上很酷,那么从这里开始。

于 2014-01-06T04:27:33.457 回答