如何用roxygen2文档化并导出Rcpp函数生成的常量?
解决R包中活动绑定的导出与文档化问题
要搞定NA_lazy_的导出和正确生成帮助页面,需要调整roxygen2注释和活动绑定的创建位置,具体步骤如下:
1. 修正活动绑定的创建位置
之前的代码把活动绑定建在了.GlobalEnv,这会导致包加载后无法在包命名空间中访问该对象。应该将其创建在包的命名空间内,用asNamespace("你的包名")指定目标环境(替换成你实际的包名称)。
同时,makeActiveBinding的第二个参数需要是一个无参函数,用来调用你的Rcpp函数lazyNA,所以要写成function() lazyNA()。
2. 补充roxygen2注释标签
- 添加
@export标签:让roxygen2自动在NAMESPACE中生成导出规则,确保包加载后能访问NA_lazy_。 - 添加
@usage标签:明确帮助页面的Usage部分内容。 - 用
@format标签说明这是一个活动绑定,提升帮助文档的可读性。
最终代码示例
在包的R脚本文件(比如R/lazyNA.R)中写入:
#' Lazy missing value #' #' An active binding that returns the value generated by the `lazyNA` Rcpp function. #' #' @usage NA_lazy_ #' @export #' @format An active binding returning the lazy NA value makeActiveBinding( symbol = "NA_lazy_", fun = function() lazyNA(), env = asNamespace("your_package_name") # 替换为你的包名 )
关键注意事项
- 确保你的Rcpp函数
lazyNA已经通过// [[Rcpp::export]]正确导出到包的命名空间,否则R代码中无法调用它。 - 执行
devtools::document()重新生成文档和NAMESPACE文件,然后重新安装加载包,就能正常访问NA_lazy_,且帮助页面会包含Usage部分。
内容的提问来源于stack exchange,提问作者Stéphane Laurent
相关产品推荐
相关产品推荐

