我正在创建一个R包,其功能输出之一是HTML报告。我想使用一个Rmd文件来创建它,该文件将安装在软件包中。
在this thread之后,我了解了inst / rmd / file.Rmd的用法以及如何调用它(system.file("rmd", "report.Rmd", package = "thepackage")
)。
我的包函数thepackage::run_report(params, dir)
应该调用Rmd文件,发送参数,并最终将报告导出到指定目录。
在报告本身中,我想同时运行thepackage
的导出函数和非导出的函数。
我简化了代码,但是符合想法。
run_report(params, dir = getwd()) {
input <- system.file("rmd", "report.Rmd", package = "thepackage")
rmarkdown::render(input = input,
params = params,
output_file = "report.html",
output_dir = dir,
clean = TRUE)
}
get_data()
也是该包的导出功能:---
title: "Comparison Report"
output: html_document
params:
data: ""
impute_func: ""
``` {r setup}
knitr::opts_chunk$set(echo = FALSE, message = FALSE, warning = FALSE, cache = FALSE)
data <- params$data
impute_func <- params$impute_func
``` #
``` {r get_data}
library(thepackage)
dataset <- get_data(data)
dataset_ready <- thepackage:::impute_values(data, impute_func)
``` #
``` {r summary}
summary(dataset_ready)
``` #
我希望能够使用包的导出和非导出功能,而不必使用:::命令。总的来说,我希望RMD像包中的其他任何导出函数一样,可以使用同一包中的非导出函数。
如果知道,在这种情况下的最佳做法是什么?
最佳做法是仅使用导出的功能。如果发现需要使用内部功能,请仔细考虑您的设计:包的用户也有同样的需求吗?
因此,没有标准的方法可以执行您想要的操作,但是非标准方法有很多可能性。可能最简单的方法是在文档的开头添加一个代码块,以导入所需的每个内部函数,例如
```{r echo = FALSE}
impute_values <- thepackage:::impute_values
```