Is it possible to create a default comment header template in R for all new scripts?
I generally include some standard info at the top of all my scripts and would like
If you are using vim you could define a snippet like this ultisnips one in a separate R-snippet file:
snippet header "R Header template" b
#' ---
#' title: ${1:title here}
#' author: ${2:John Smith (John@Smith.com)}
#' date: ${3:`date +%Y-%m-%d`}
#' ---
endsnippet
You would only have to type header<tab>
which is a massive time-saver especially since it fills in predefined values (such date).
This seems also Rmarkdown compatible as discussed here.
Following the suggestion from @lmo above, I created two new code snippets in RStudio by editing the snippets file located at Preferences > Code > Edit Snippets
Note: Code below the snippet definition must be indented using tab and not two spaces
Snippet 1: Comment header for new scripts
snippet header_script
##################################################
## Project:
## Script purpose:
## Date:
## Author:
##################################################
Snippet 2: Comment header for sections of code within a script:
snippet header_section
## Section:
##################################################
Now, whenever I want to insert a given header, I just start typing the snippet name (e.g. header_script
), select it from the autocomplete menu (do not type out in full), and hit enter to insert the comment header.
I don't know if you can do it directly, but you may be able to approximate it by putting the following in your Rprofile.
make_r_template <- function(filename = "r_template.R", dir = getwd())
{
if (file.exists(file.path(dir, filename))) invisible(NULL)
else{
write(c("##################################################",
"## Project:",
"## Script purpose:",
"## Date:",
"## Author:",
"##################################################"),
file = file.path(dir, filename),
sep = "\n")
}
}
make_r_template()
This will run every time R starts and write the blank template to the working directory, so long as it doesn't exist. You could also run the function at any point with a different filename
value to create a blank template elsewhere.
A nice supplemental touch would be a second function that looks at a file, attempts to identify the header, and inserts it if the header is not found.