This is because you're using the knit button in Rstudio
which creates a new session then executes rmarkdown::render
, in order to use locally defined function you have to call rmarkdown::render
from the console.
Note: that this will block the console until the .Rmd
file is rendered.
my.envir <- new.env(parent=baseenv())
local({
f <- function() { ... }
#...
}, my.envir)
# OR source your file directly into my.envir
source("ur.file.R", local = my.envir)
rmarkdown::render(input, # path to the .Rmd file
output_format = "html_document", # output type if not set it'll use the first one found in the yaml header
output_file = NULL, # name of the output file by default it will be the
# name of the .Rmd with the extension changed
clean = TRUE, # set to FALSE if you want to keep intermediary files
envir = my.envir, # this where the magic happens
# if you don't want to modify the global env you can create your own environment and add the function to it
quiet = FALSE # set to TRUE if you want to suppress the output
)
EDIT following @KonardRudolph's comments:
It's better to source
your file into the rmd itself, as the main goal of Rmarkdown is reproducible research.
```{r setup, include=FALSE}
.
.
.
source("path/to/file.R")
```