Пользовательская отсутствующая функция

69
6

missing возвращает TRUE для аргумента, не предоставленного вызывающим, независимо от того, имеет ли значение аргумент значение по умолчанию.

f <- function(a, b=2, c) {
cat(missing(a), missing(b), missing(c), fill=TRUE)
}

f(a=1)
# FALSE TRUE TRUE

Мне нужна версия missing которая возвращает TRUE только для неподдерживаемых аргументов, которые не имеют значений по умолчанию. Я что-то придумал, но это вроде уродливо.

really.missing <- function(x) {
name.supplied <- as.character(substitute(x))
do.call(function(y) missing(y),
unname(mget(name.supplied, envir=parent.frame())))
}
ff <- function(a, b=2, c) {
cat(really.missing(a), really.missing(b), really.missing(c), fill=TRUE)
}
ff(a=1)
# FALSE FALSE TRUE

Есть ли более сжатый способ?

спросил(а) 2014-04-25T22:34:00+04:00 6 лет, 5 месяцев назад
1
Решение
58

Если я правильно понял ваш вопрос, как насчет этого:

noval<- function(x) {
tryCatch( {force(x); FALSE}, error = function(x) TRUE)
}

f <- function(a, b=2, c) {
cat(noval(a), noval(b), noval(c), fill=TRUE)
}

f(a=1)

Эта noval функция заставит ваш параметр быть оцененным (что будет успешным, если оно прошло или имеет значение по умолчанию, но не сработало иначе) и соответственно вернет FALSE/TRUE.

ответил(а) 2014-04-25T23:10:00+04:00 6 лет, 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема