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.
::install_github("Gaborcsardi/cyclocomp") devtools
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) {
thisbreak
that
} }))
#> [1] 4
cyclocomp(quote({
for (var in seq) {
thisnext
that
} }))
#> [1] 4
Multiple (explicit or implicit) return
calls also add to
the complexity:
<- function(arg) {
f if (arg) {
return("this")
else {
} return("that")
}"Otherwise return me"
}cyclocomp(f)
#> [1] 4
MIT © Mango Solutions; Posit Software, PBC