我正在研究R Markdown,以记录我经常使用的功能。我会将它们放入一个R Markdown文件来记录它们,然后能够阅读我在函数背后的想法,如果我几个月后再回来它
我的问题是,如果我开始一个新的R项目,是否有可能获取r markdown文件并使用我创建的函数库,只需通过调用它们,如果我采购常规R文件。我真的不想保留两组函数文件
我很欣赏这可能是一个初学者的问题,但任何指向教程等的帮助将不胜感激
由于
答案 0 :(得分:3)
正如评论中提到的,您可能应该为此目的创建一个包。但是,如果您坚持在脚本中放置函数定义并使用RMarkdown文件对其进行记录,则可以使用read_chunk()
包中的knitr
。
请注意,此方法与您请求的方法略有不同。您希望将markdown文件中的函数定义与文档一起使用。然后你想以某种方式将该文件导入R脚本以便使用该函数。我没有找到办法做到这一点(即使有可能)。
我建议的替代方案是将函数定义放在自己的R脚本中,比如fun.R
。然后,Rmarkdown文件从fun.R
读取函数定义并添加文档。如果要在其他一些脚本中使用该函数,可以只输入fun.R
(而不是markdown文件)。这仍然意味着您只需要维护一次函数定义的代码。
让我以一个例子来说明这一点。这是fun.R
:
## ---- fun
fun <- function(x) x^2
第一行是稍后将使用的标识符。降价文件如下:
---
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)
```
第一个块使用fun.R
读入knitr::read_chunk
。稍后,您可以定义一个空块,该块具有fun.R
中使用的标识符作为其名称。这将表现为fun.R
的内容直接写在此文件中。如您所见,您也可以在以后的块中使用fun()
。这是生成的html文件的屏幕截图:
在您要使用fun()
的脚本中,只需添加source("fun.R")
即可获取函数定义。
您还可以在单个R文件中包含多个函数,并仍然单独记录它们。只需在每个函数定义之前放置一个以## ----
开头的标识符,然后创建引用每个标识符的空块。
这肯定比你要求的要复杂一些,因为它涉及两个文件而不是一个。但至少没有冗余
答案 1 :(得分:0)
也许这已足够接近 - 您可以使用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