13

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 to automate the process of creating the comment header.

For example:

##################################################
## Project:
## Script purpose:
## Date:
## Author:
##################################################
TClavelle
  • 578
  • 4
  • 12
  • 1
    Assuming you are using rstudio (R and rstudio are independent pieces of software), you may have a look at the relatively new code snippets feature in rstudio, outlined [here](https://support.rstudio.com/hc/en-us/articles/204463668-Code-Snippets). It is not exactly right, but might get you pretty close. – lmo Nov 15 '16 at 17:57
  • Thanks! I think this is actually a better option since it will allow me to make (and easily insert) comment headers with different formats (e.g. for function scripts, cleanup scripts, shiny apps, etc) – TClavelle Nov 15 '16 at 18:44
  • Also, @lmo please upvote the question if you found it interesting/useful! – TClavelle Nov 15 '16 at 21:17

3 Answers3

12

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.

TClavelle
  • 578
  • 4
  • 12
3

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.

Benjamin
  • 16,897
  • 6
  • 45
  • 65
0

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.