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] 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; Posit Software, PBC
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.