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.


cyclocomp

Cyclomatic Complexity of R Code

Project Status: Active - The project has reached a stable, usablestate and is being activelydeveloped. CRAN RStudio mirrordownloads CoverageStatus R-CMD-check Codecov testcoverage

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.

Installation

devtools::install_github("Gaborcsardi/cyclocomp")

Usage

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] 2
cyclocomp(quote( while (condition) { loop } ))
#> [1] 3
cyclocomp(
  function(arg) { calulate(this); and(that) }
)
#> [1] 1
cyclocomp(ls)
#> [1] 10
cyclocomp(cyclocomp)
#> [1] 1

Some more examples for the R control structures. A simple if first:

cyclocomp(quote({
  if (condition) this
}))
#> [1] 2

An if with an else branch:

cyclocomp(quote({
  if (condition) this else that
}))
#> [1] 2

Loops:

cyclocomp(quote({
  for (var in seq) expr
}))
#> [1] 3
cyclocomp(quote({
  while (cond) expr
}))
#> [1] 3
cyclocomp(quote({
  repeat expr
}))
#> [1] 2

break and next statements add to the complexity:

cyclocomp(quote({
  for (var in seq) {
    this
    break
    that
  }
}))
#> [1] 4
cyclocomp(quote({
  for (var in seq) {
    this
    next
    that
  }
}))
#> [1] 4

Multiple (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] 4

License

MIT © Mango Solutions; Posit Software, PBC

Reference manual

It appears you don't have a PDF plugin for this browser. You can click here to download the reference manual.

install.packages("cyclocomp")

1.1.2 by Gabor Csardi, 7 months ago


https://github.com/gaborcsardi/cyclocomp


Report a bug at https://github.com/gaborcsardi/cyclocomp/issues


Browse source code at https://github.com/cran/cyclocomp


Authors: Gabor Csardi [aut, cre]


Documentation:   PDF Manual  


MIT + file LICENSE license


Imports callr, crayon, desc, remotes, withr

Suggests processx, testthat


Imported by PaRe, goodpractice, packager.

Suggested by NHSRplotthedots, blockr.dag, caretEnsemble, datacutr, fakemake, framework, inlpubs, lintr, maidr, readepi, sqlq.


See at CRAN