R: захват заданных аргументов вызова функции - PullRequest
0 голосов
/ 02 октября 2018

Мне нужно захватить заранее заданные аргументы вызова функции.Это кажется легким для неуказанных с помощью rlang::list2(...), но более трудным для указанных («указанное» значение определено в формалах функции).

Я экспериментировал с base::match.call и функциями изhttps://rlang.r -lib.org / reference / index.html # section-вызовы , но пока не увенчались успехом.

library(rlang)

capture_dots <- function(..., arg1) {
  list2(...)
}

capture_dots("abc", arg1 = 1, arg2 = 2)
#> [[1]]
#> [1] "abc"
#> 
#> $arg2
#> [1] 2

Желаемый вывод

capture_prespecified("abc", arg1 = 1, arg2 = 2)
#> $arg1
#> [1] 1

1 Ответ

0 голосов
/ 02 октября 2018

Если вы хотите захватить все именованные параметры для вашей функции, вы можете использовать formals(), чтобы получить их имена (и просто отфильтровать "...")

capture_dots <- function(..., arg1) {
  args <- Filter(function(x) x!="...", names(formals()))
  as.list(environment())[args]
}

capture_dots("abc", arg1 = 1, arg2 = 2)

Или, есливы запускаете его в начале функции, точки не расширяются, и других переменных не будет, поэтому вы можете просто получить текущую среду с помощью

capture_dots <- function(..., arg1) {
  as.list(environment())
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...