Skip to contents

Report the use of undesirable functions (e.g. base::return(), base::options(), or base::sapply()) and suggest an alternative.

Usage

undesirable_function_linter(
  fun = default_undesirable_functions,
  symbol_is_undesirable = TRUE
)

Arguments

fun

Named character vector. names(fun) correspond to undesirable functions, while the values give a description of why the function is undesirable. If NA, no additional information is given in the lint message. Defaults to default_undesirable_functions. To make small customizations to this list, use modify_defaults().

symbol_is_undesirable

Whether to consider the use of an undesirable function name as a symbol undesirable or not.

See also

linters for a complete list of linters available in lintr.

Examples

# defaults for which functions are considered undesirable
names(default_undesirable_functions)
#>  [1] ".libPaths"     "attach"        "browser"       "debug"        
#>  [5] "debugcall"     "debugonce"     "detach"        "library"      
#>  [9] "mapply"        "options"       "par"           "require"      
#> [13] "sapply"        "setwd"         "sink"          "source"       
#> [17] "structure"     "Sys.setenv"    "Sys.setlocale" "trace"        
#> [21] "undebug"       "untrace"      

# will produce lints
lint(
  text = "sapply(x, mean)",
  linters = undesirable_function_linter()
)
#> ::warning file=<text>,line=1,col=1::file=<text>,line=1,col=1,[undesirable_function_linter] Function "sapply" is undesirable. As an alternative, use vapply() with an appropriate `FUN.VALUE=` argument to obtain type-stable simplification.

lint(
  text = "log10(x)",
  linters = undesirable_function_linter(fun = c("log10" = NA))
)
#> ::warning file=<text>,line=1,col=1::file=<text>,line=1,col=1,[undesirable_function_linter] Function "log10" is undesirable.

lint(
  text = "log10(x)",
  linters = undesirable_function_linter(fun = c("log10" = "use log()"))
)
#> ::warning file=<text>,line=1,col=1::file=<text>,line=1,col=1,[undesirable_function_linter] Function "log10" is undesirable. As an alternative, use log().

lint(
  text = 'dir <- "path/to/a/directory"',
  linters = undesirable_function_linter(fun = c("dir" = NA))
)
#> ::warning file=<text>,line=1,col=1::file=<text>,line=1,col=1,[undesirable_function_linter] Function "dir" is undesirable.

# okay
lint(
  text = "vapply(x, mean, FUN.VALUE = numeric(1))",
  linters = undesirable_function_linter()
)

lint(
  text = "log(x, base = 10)",
  linters = undesirable_function_linter(fun = c("log10" = "use log()"))
)

lint(
  text = 'dir <- "path/to/a/directory"',
  linters = undesirable_function_linter(fun = c("dir" = NA), symbol_is_undesirable = FALSE)
)