如何在roxygen中为后续加载的函数做前向声明?
解决Roxygen引用后续加载函数的报错问题
关于globalVariables()的使用
globalVariables()确实是官方认可的解决这类问题的方式,但得用对:
- 只用来声明那些确定存在但加载顺序靠后的对象,别拿来掩盖真正的未定义错误
- 建议把所有这类声明集中放在一个单独的文件(比如
globals.R)里,方便后续维护,也避免到处散落
Roxygen本身的变通方法
roxygen没有专门的语法直接声明「这个函数后面会定义」,但有两种可行的变通方式:
- 调整文件加载顺序:R包默认按文件名的字母顺序加载文件,你可以给定义
.postmvn的文件加个前缀(比如01-postmvn.R),让它在被引用的文件之前加载,从根源上消除报错,这是最干净的解法 - 修改文档引用方式:如果不想调整文件顺序,可以把文档里的
\code{.postmvn}改成\code{\link[=.postmvn]{.postmvn}},不过这种方式只是绕过检查,不如调整顺序来得彻底
总结
优先考虑调整文件加载顺序,这符合R包的加载逻辑,也最省心;如果实在没法调整顺序,再用globalVariables(),但一定要规范管理这些全局变量声明,别滥用。
内容的提问来源于stack exchange,提问作者Stefano Borini
相关产品推荐
相关产品推荐

