Cyclomatic Complexity of R Code
Cyclomatic complexity is a software metric (measurement), used to indicate the complexity of a program. It is a quantitative measure of the number of linearly independent paths through a program’s source code. It was developed by Thomas J. McCabe, Sr. in 1976.
devtools::install_github("Gaborcsardi/cyclocomp")library(cyclocomp)cyclocomp takes quoted R expressions or function
objects, and returns a single integer, the cyclomatic complexity of the
expression or function.
cyclocomp(quote( if (condition) "foo" else "bar" ))#> [1] 2cyclocomp(quote( while (condition) { loop } ))#> [1] 3cyclocomp(
  function(arg) { calulate(this); and(that) }
)#> [1] 1cyclocomp(ls)#> [1] 10cyclocomp(cyclocomp)#> [1] 1Some more examples for the R control structures. A simple
if first:
cyclocomp(quote({
  if (condition) this
}))#> [1] 2An if with an else branch:
cyclocomp(quote({
  if (condition) this else that
}))#> [1] 2Loops:
cyclocomp(quote({
  for (var in seq) expr
}))#> [1] 3cyclocomp(quote({
  while (cond) expr
}))#> [1] 3cyclocomp(quote({
  repeat expr
}))#> [1] 2break and next statements add to the
complexity:
cyclocomp(quote({
  for (var in seq) {
    this
    break
    that
  }
}))#> [1] 4cyclocomp(quote({
  for (var in seq) {
    this
    next
    that
  }
}))#> [1] 4Multiple (explicit or implicit) return calls also add to
the complexity:
f <- function(arg) {
  if (arg) {
    return("this")
  } else {
    return("that")
  }
  "Otherwise return me"
}
cyclocomp(f)#> [1] 4MIT © Mango Solutions; Posit Software, PBC