I never thought too much about RStudio addins, but I saw a few cool examples ( jadd, colorpicker, and addinslist) and decided to take a closer look. After a little research, it seemed easier than I thought. It was easier because RStudio provided some excellent documentation on addins and it turns out that if you can write R code, then you can write an RStudio addin.
Around the time I was looking at addins, I started taking advantage of a little
RStudio trick to navigate long scripts. If you create comments that are a pound sign and
end with at least 4 dashes (# Comment ----
), then they will automatically be
organized and appear in an organizational perspective at the bottom left of the Source pane.
I’ll take any extra organizational help I can get so I started annotating my code with comments like these to break it up. Then the idea hit me to create an Addin and link a keyboard shortcut to it so I can format comments quickly to this standard.
The logic is written in R code and the rstudioapi
package is used so that your
code can interact with RStudio. The R code can be complex or really simple (see
the RStudio example on Addin basics).
However, you must structure your project with certain metadata, like an R package, that
will allow RStudio to automatically discover and register these addins when the
addin is installed.
The R code should be documented using the roxygen2
style. Here is the small
bit of regex that powers most of my sectioncomment addin.
#' Function to create the padded comment
#'
#' This function is the logic that runs to reformat
#' the comment as a section break
#'
#' @usage comment_styler(x, doc_mode=FALSE, l = 80)
#' @importFrom stringr str_pad
#' @param x a string to format
#' @param doc_mode a logical indicating only to convert
#' lines starting with at least a double hash sign
#' @param l an integer indicating length to pad
#' @return a string that is formatted
comment_styler <- function(x, doc_mode=FALSE, l=80) {
starter_regex <- '(\\s*#+\\s*)(.*)'
if(doc_mode)
starter_regex <- '(\\s*#{2,}\\s*)(.*)'
if(grepl(starter_regex, x)){
clean_x <- trimws(gsub('-*$', '', gsub('-+\\s+-+', '', trimws(x))))
x <- str_pad(gsub(starter_regex, '# \\2 ', clean_x),
width=l, side='right', pad='-')
}
return(x)
}
As you can see, it’s not very sophisticated. I just look for text in the Source pane that appear to be a section comment and pad the line up.
If you like the idea of my Addin you can install from RStudio with the following command:
devtools::install_github("StevenMMortimer/sectioncomment")
After installing it should apper in your Addins dropdown and you can use it, like so:
My favorite reason to use is that I can write an entire outline of the steps I want to perform before writing a single line of code, then turn those steps into sections.
This a great way to force yourself to think about what you are going to code before diving in head first and getting lost in a jumbled mess of your own thoughts. I hope you enjoy using it as much as I do and you consider creating your own addin.