Передача пропущенных квази-цитатных аргументов - PullRequest
0 голосов
/ 04 марта 2019

Я пытаюсь использовать квази-цитату для передачи необработанного имени переменной в функцию, которая передает его другой функции.Тем не менее, аргумент является необязательным, поэтому мне нужно проверить, была ли 1-й функции задан этот аргумент и передан этот отсутствующий аргумент 2-й функции.

В этих примерах b относится к переменной вdata.frame.

Проверяя, была ли передана функции выражение сырой переменной или нет аргумента, я делаю

foo <- function(a) {
  print(is_missing(enexpr(a)))
}
foo()
# [1] TRUE
foo(b)
# [1] FALSE

Без enexpr переменная b будет пытатьсяоценивается - а при отсутствии - ошибки.

Далее я пытаюсь передать отсутствующий аргумент другой функции (bar), которая затем проверит ее наличие:

foo2 <- function(a) {
  print(is_missing(enexpr(a)))
  bar(maybe_missing(a))
}
bar <- function(a) {
  print(is_missing(enexpr(a)))
}
foo2()
# [1] TRUE 
# [1] FALSE  <-- "wrong" (but not unexpected)
foo2(b)
# [1] FALSE
# [1] FALSE

Вопрос: Как я могу в bar проверить, был ли foo2 передан аргумент?

Запуск R 3.5.1 с rlang 0.3.0.1.

1 Ответ

0 голосов
/ 04 марта 2019

Мы могли бы сделать !! и enexpr в foo2

foo2 <- function(a) {
  print(is_missing(enexpr(a)))
  bar(!!maybe_missing(enexpr(a)))
}

foo2()
#[1] TRUE
#[1] TRUE

foo2(b)
#[1] FALSE
#[1] FALSE
...