Block usage of ifelse()
where pmin()
or pmax()
is more appropriate
Source: R/ifelse_censor_linter.R
ifelse_censor_linter.Rd
ifelse(x > M, M, x)
is the same as pmin(x, M)
, but harder
to read and requires several passes over the vector.
Details
The same goes for other similar ways to censor a vector, e.g.
ifelse(x <= M, x, M)
is pmin(x, M)
,
ifelse(x < m, m, x)
is pmax(x, m)
, and
ifelse(x >= m, x, m)
is pmax(x, m)
.
See also
linters for a complete list of linters available in lintr.
Examples
# will produce lints
lint(
text = "ifelse(5:1 < pi, 5:1, pi)",
linters = ifelse_censor_linter()
)
#> ::warning file=<text>,line=1,col=1::file=<text>,line=1,col=1,[ifelse_censor_linter] pmin(x, y) is preferable to ifelse(x < y, x, y).
lint(
text = "ifelse(x > 0, x, 0)",
linters = ifelse_censor_linter()
)
#> ::warning file=<text>,line=1,col=1::file=<text>,line=1,col=1,[ifelse_censor_linter] pmax(x, y) is preferable to ifelse(x > y, x, y).
# okay
lint(
text = "pmin(5:1, pi)",
linters = ifelse_censor_linter()
)
lint(
text = "pmax(x, 0)",
linters = ifelse_censor_linter()
)