ある関数のデフォルト引数がある引数のみを、そのデフォルト引数とともに抜く
例えばここにこんな関数があったとする。
f <- function(x, y = 100, args = list()){ y }
そしてこの関数のデフォルト引数がある引数のみを、そのデフォルト引数とともに抜きたいと思うことがある、俺にはある。
こういう処理をしてくれる関数 get_default_args
が欲しいということだ
> get_default_args(f) $y [1] 100 $args list()
このような関数は以下のように実装することができる。 詳細はCodeコメントを読んで欲しい。
get_default_args <- function(func){ # formalsで引数とデフォルト引数をまとめてとれる。ただしpairlist型なので無理やりlistにする x <- as.list(formals(func)) # デフォルト引数のない引数(上のk名数fでいうx)はnameオブジェクトと判定されるので、それ以外(デフォルト引数ある引数)をもってくる has_default_value <- purrr::map_lgl(x, ~ !is.name(.x)) purrr::keep(x, has_default_value) }