Require c()
to be applied before relatively expensive vectorized functions
Source: R/inner_combine_linter.R
inner_combine_linter.Rd
as.Date(c(a, b))
is logically equivalent to c(as.Date(a), as.Date(b))
.
The same equivalence holds for several other vectorized functions like
as.POSIXct()
and math functions like sin()
. The former is to be
preferred so that the most expensive part of the operation (as.Date()
)
is applied only once.
See also
linters for a complete list of linters available in lintr.
Examples
# will produce lints
lint(
text = "c(log10(x), log10(y), log10(z))",
linters = inner_combine_linter()
)
#> ::warning file=<text>,line=1,col=1::file=<text>,line=1,col=1,[inner_combine_linter] Combine inputs to vectorized functions first to take full advantage of vectorization, e.g., log10(c(x, y)) only runs the more expensive log10() once as compared to c(log10(x), log10(y)).
# okay
lint(
text = "log10(c(x, y, z))",
linters = inner_combine_linter()
)
lint(
text = "c(log(x, base = 10), log10(x, base = 2))",
linters = inner_combine_linter()
)