The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.

cyclocomp

Cyclomatic Complexity of R Code

Project Status: Active - The project has reached a stable, usable state and is being actively developed. CRAN RStudio mirror downloads Coverage Status R-CMD-check

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

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.