我经常将自定义函数保存在R脚本中,然后在R脚本的开头使用source(functions.R)
将其加载到环境中。
比方说,我现在想创建一个RMarkdown文档来总结一些依赖于这些功能的分析结果。我不想将这些功能复制粘贴到.Rmd文件中(有很多功能,我可能会随着时间的推移对其进行修改)。
如何将这些函数加载到.Rmd文件中?现在,我只是在.Rmd文件中的代码块中使用source(functions.R)
,但是我不确定这是否是最佳实践。
示例:
我有两个文件:functions.R
和report.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)`
答案 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)))
```