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.
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("MangoTheCat/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] 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
MIT © Mango Solutions
New function cyclocomp_package_dir that works on a local package tree
cyclocomp_package returns results in decreasing order of complexity
@richierocks
New function cyclocomp_q that quotes the expression, @richierocks
First public release.