rlang tricks

library(rlang)

Decompose Fun and List of Args

f <- function(fun = stats::mad, args = list()) {
  
   call <- rlang::call2(fun, c(1:10, NA), !!!args)
   eval(call)
}

f()
[1] NA
f(args = list(na.rm = TRUE))
[1] 3.7065
g <- function(x, fun = "median", pkg = "stats", args = list()) {
  
  call <- rlang::call2(fun, x, !!!args, .ns = pkg)
  eval(call)
}
  
g(c(rep(1, 5), rep(2, 3)))
[1] 1
g(c(rep(1, 5), rep(2, 3), NA), "mean", "base", args = list(na.rm = T))
[1] 1.375