【发布时间】:2020-05-07 23:47:33
【问题描述】:
在开发包时,我经常将 R 脚本存储在inst 目录中,这些脚本生成的数据对象然后包含在包中,即在data 目录中存储为someObj.rda。
反过来,这些对象具有带有 roxygen2 头文件的 R 脚本(例如 someObj.R)。 理想情况下,我想在 roxygen2 标头中包含一行,将脚本作为代码进行源和格式化,在示例之外。是的,我可以复制这些行,但在 DRY 原则中,最好让文档自动包含代码。
我尝试了以下方法但没有成功:
rdScript <- function(x) {
lns <- readLines(x)
lns <- sprintf("#' \\code{%s}", lns)
cat(lns, sep = "\n")
}
#' @name someObj
#' @title Some R Bbject
#' @description Some R Object
#' @details
#' Data created with the following script:
#' @eval rdScript("inst/createCrimeData.R")
#'
NULL
还有这个:
rdScript <- function(x) {
lns <- readLines(x)
lns <- sprintf("\\code{%s}", lns)
lns
}
#' @name someObj
#' @title Some R Bbject
#' @description Some R Object
#' @details
#' Data created with the following script:
#' @eval rdScript("inst/createCrimeData.R")
#'
NULL
编辑以回应反对将这些脚本放在inst中的论点
虽然这不是这个问题的意图,但我想证明 inst 是这些脚本的理想位置。我个人在制作不是通用 R 包,而是制作 R 包来伴随手稿和重现分析时会遇到这种情况。 R 包提供了一种理想 格式,用于传播完全可重复的分析。但是,分析通常包括不需要全部的大型数据集。通过在inst 中包含一个脚本,用户可以选择(轻松地)重现包中包含的数据,但不需要重新创建分析的输入数据。掩盖脚本是没有意义的。
【问题讨论】:
-
“存储在 inst 目录中的 R 脚本生成数据对象然后包含在包中”是什么意思。 /inst 中的东西没有运行,它被复制到包根目录
-
正确——我经常包含由我不打算让用户运行的某些脚本自己创建的数据对象。出于重现性目的,我将脚本包含在 inst.在文档中也包含该脚本会很酷。
-
如果你不打算让用户运行你的脚本,不要把它放在 /inst
-
我不打算让典型用户运行代码。
-
“R 软件包为传播完全可重复的分析提供了一种理想的格式。”如果这是一种理想的格式,你就不必问这个问题了