使用 R Markdown 文档作为函数的来源

Using an R Markdown Document as a source for functions

我正在研究 R Markdown 以记录我经常使用的功能。我会将它们放入 R Markdown 文件中以记录它们,然后如果我在几个月后回来使用它,就能够阅读我对函数背后的想法

我的问题是,如果我开始一个新的 R 项目,是否可以获取 r markdown 文件并使用我创建的函数库,只需调用它们,就像我获取一个常规 R 文件一样。我真的不想维护两套函数文件

我很感激这可能是一个初学者问题,但是任何指向教程等的帮助将不胜感激

谢谢

klmr/modules 包已被同一作者的盒装包取代。它在 CRAN 上。在 运行 下面的 cat 命令之后,这些行显示 add2 的 roxygen2 帮助。

box::use(./test)
box::help(test$add2)

也许这已经足够了——您可以使用 github klmr/modules 包(不是 CRAN 模块包)将 roxygen2 文档和代码合并到一个文件中,而无需创建包。例如,在安装模块包后,将其复制到剪贴板,然后将其粘贴到 R 控制台以创建带有嵌入式文档的单个文件模块。随后的代码然后将其导入,运行 是它的一个函数并调用帮助。有关详细信息,请参阅模块包的文档。

请注意,这有以下优点:(1) 所有内容都在一个文件中,(2) 如果您以后决定使用包,您可以在包中使用与 roxygen2 完全相同的文件 -- 否需要修改任何东西,(3) roxygen2 的任何学习也适用于包。

# create a file with our documentation and code

Lines <- "
#' Add two numbers.
#'
#' @param x the first number.
#' @param y the second number.
#' @return The sum.
#' @note This is just a simple example.
#'
#' This function is a simple example intended to show how to use the modules
#' package with roxygen2.
add2 <- function(x, y) x + y
"
cat(Lines, file = "test.R")


# now we can import it 
# devtools::install_github("klmr/modules")
library(modules)

test <- import("test")  # do not include the .R extension

test$add2(1, 2)
## [1] 3

# this will cause help page to appear
?test$add2

如评论中所述,您可能应该为此目的创建一个程序包。但是,如果您坚持将函数定义放在脚本中并使用 RMarkdown 文件记录它们,那么使用 knitr 包中的 read_chunk() 可能是可行的方法。

请注意,此方法与您要求的略有不同。您希望 markdown 文件中包含函数定义以及文档。然后你想以某种方式将该文件源到你的 R 脚本中,以便使用该函数。我没有找到一种方法来做到这一点(尽管它可能是可能的)。

我提出的替代方案是将函数定义放在它自己的 R 脚本中,比如 fun.R。然后 Rmarkdown 文件从 fun.R 中读取函数定义并添加文档。如果你想在其他脚本中使用这个函数,你可以简单地 source fun.R (而不是 markdown 文件)。这仍然意味着您只需维护函数定义的代码一次。

所以让我用一个例子来说明这一点。这是 fun.R:

## ---- fun
fun <- function(x) x^2

第一行是后面要用到的标识符。 markdown文件如下:

---
title: "Documentation of fun()"
output: html_document
---

This documents the function `fun()` defined in `fun.R`.
```{r,cache = FALSE}
knitr::read_chunk("fun.R")
```

This is the function definition
```{r fun}
```

This is an example of how  to use `fun()`:
```{r use_fun}
fun(3)
```

第一个块使用 knitr::read_chunk 读入 fun.R。稍后,您可以定义一个空块,其名称为 fun.R 中使用的标识符。这就像 fun.R 的内容直接写入此文件一样。如您所见,您还可以在后面的块中使用 fun()。这是生成的 html 文件的屏幕截图:

在您想要使用 fun() 的脚本中,您只需添加 source("fun.R") 来获取函数定义。

您也可以在单个 R 文件中包含多个函数,并且仍然单独记录它们。只需在每个函数定义之前放置一个以 ## ---- 开头的标识符,然后创建引用每个标识符的空块。

诚然,这比您要求的要复杂一些,因为它涉及两个文件,而不是一个文件。但至少没有冗余