使用{roxygen2}注释创建新{box}模块的步骤求助
从R脚本到带文档的box模块:实操指南
先理清核心区别:别拿R包的工具套box模块
devtools::document()是给标准R包用的,而box模块不需要R包的DESCRIPTION、NAMESPACE那套结构,你之前报错就是因为devtools在找R包根目录,你的Module1不是R包,自然找不到。别再用devtools那一套,跟着下面的步骤来。
步骤1:调整文件结构(可选但规范)
你的当前结构:
Module1/ R/ functionscript1.R
box模块的标准玩法更灵活:
- 要么直接把
functionscript1.R放到Module1根目录下; - 要么保留R目录也可以,但必须在Module1根目录新建一个
__init__.r文件(注意是前后各两个下划线),这个文件是模块的入口,用来控制导出内容。
步骤2:用box自带工具生成文档
box支持roxygen2注释,但要用自己的命令生成文档:
- 打开R,把工作目录设为Module1的父目录(比如Module1在
~/my_projects下,就运行setwd("~/my_projects")) - 执行命令:
这会在Module1目录下自动生成box::document("Module1")man/文件夹,里面就是你的函数帮助文档。
步骤3:配置模块导出(关键)
打开Module1下的__init__.r,写入以下内容:
#' @export box::use(./R/functionscript1[...])
- 这里的
[...]表示导出该脚本里所有带#' @export注释的函数; - 如果只想导出特定函数,改成
functionscript1[你的函数名1, 你的函数名2]就行。
步骤4:测试模块加载
现在就能正常调用模块了:
- 加载模块并通过模块名调用函数:
box::use(./Module1) Module1::你的函数名() - 直接加载模块里的所有导出函数(不用加模块前缀):
box::use(./Module1[...]) 你的函数名()
常见坑排查
- 文档生成失败:检查roxygen注释格式,每一行注释必须以
#'开头,#' @export要紧跟在函数定义的上方; box::use()没效果:确保工作目录是Module1的父目录,或者用绝对路径加载(比如box::use("~/my_projects/Module1"));另外检查__init__.r里的路径是否和你的脚本位置匹配。
内容的提问来源于stack exchange,提问作者C. W.
相关产品推荐
相关产品推荐

