使用 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 文件中包含多个函数,并且仍然单独记录它们。只需在每个函数定义之前放置一个以 ## ----
开头的标识符,然后创建引用每个标识符的空块。
诚然,这比您要求的要复杂一些,因为它涉及两个文件,而不是一个文件。但至少没有冗余
我正在研究 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 文件中包含多个函数,并且仍然单独记录它们。只需在每个函数定义之前放置一个以 ## ----
开头的标识符,然后创建引用每个标识符的空块。
诚然,这比您要求的要复杂一些,因为它涉及两个文件,而不是一个文件。但至少没有冗余