我应该如何将自定义函数导出到RMardown文件中?

时间:2019-06-19 13:58:30

标签: r r-markdown

我经常将自定义函数保存在R脚本中,然后在R脚本的开头使用source(functions.R)将其加载到环境中。

比方说,我现在想创建一个RMarkdown文档来总结一些依赖于这些功能的分析结果。我不想将这些功能复制粘贴到.Rmd文件中(有很多功能,我可能会随着时间的推移对其进行修改)。

如何将这些函数加载到.Rmd文件中?现在,我只是在.Rmd文件中的代码块中使用source(functions.R),但是我不确定这是否是最佳实践。

示例: 我有两个文件:functions.Rreport.Rmd

functions.R:

mySum <- function(a, b) {return(a + b)}

report.Rmd:

---
title: "Report"
output: pdf_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
source('functions.R')
```

The sum of 4 and 5 is `r mySum(4, 5)`

3 个答案:

答案 0 :(得分:2)

不要那样做。请执行@ N.Williams的建议:如果您有值得重复使用的代码,请将其放在包装中。

一个包比包含其功能的脚本还要很多。该文档说明了每个功能应该做什么。如果将来决定更改其工作方式,则会知道您是否违反了文档中包含的隐式合同。如果这样做,则需要检查该函数的每次使用,以查看更改是否很重要。

答案 1 :(得分:0)

根据the documentation on source(),该函数读取,解析和评估其输入。因此,我想这就是您想要的,而且我不知道更有效的方式来加载和解析.Rmd文件中的另一个脚本。

答案 2 :(得分:0)

将文件放在同一文件夹中,就像在其他R文件中一样调用它。有一些选项可以组合文本和函数的输出。 paste0是其中之一。

    ---
    title: "test"
    output:
      html_document: default
      pdf_document: default
    date: "19 Juni 2019"
    ---

    ```{r setup, include=FALSE}
    knitr::opts_chunk$set(echo = TRUE)
    ```

    ```{r cars}
    library(shiny)
    source('functions.R')
    HTML(paste0("The sum of 4 and 5 is ", mySum(4,5)))
    ```