any_is_na_linter: Require usage of 'anyNA(x)' over 'any(is.na(x))'

View source: R/any_is_na_linter.R

any_is_na_linterR Documentation

Require usage of anyNA(x) over any(is.na(x))

Description

base::anyNA() exists as a replacement for any(is.na(x)) which is more efficient for simple objects, and is at worst equally efficient. Therefore, it should be used in all situations instead of the latter.

Usage

any_is_na_linter()

Details

This also lints NA %in% x, which is also more readably expressed as anyNA(x). In this case, note a subtle difference of behavior, namely that is.na(NaN) is TRUE while NA %in% NaN is FALSE.

Tags

best_practices, efficiency

See Also

linters for a complete list of linters available in lintr.

Examples

# will produce lints
lint(
  text = "any(is.na(x), na.rm = TRUE)",
  linters = any_is_na_linter()
)

lint(
  text = "any(is.na(foo(x)))",
  linters = any_is_na_linter()
)

# okay
lint(
  text = "anyNA(x)",
  linters = any_is_na_linter()
)

lint(
  text = "anyNA(foo(x))",
  linters = any_is_na_linter()
)

lint(
  text = "any(!is.na(x), na.rm = TRUE)",
  linters = any_is_na_linter()
)


lintr documentation built on July 16, 2026, 1:08 a.m.