Подтвердить что ты не робот

Проверьте, установлен ли аргумент функции или нет в R

У меня есть функция f, которая принимает два параметра (p1 и p2):

Если для параметра p2 значение не было передано функции, вместо этого следует использовать значение p1 ^ 2. Но как я могу узнать внутри функции, если задано значение или нет. Проблема в том, что переменная p2 не инициализируется, если не было значения. Таким образом, я не могу проверить, чтобы p2 был NULL.

f <- function(p1, p2) {
    if(is.null(p2)) {
        p2=p1^2
    }
    p1-p2
}

Как можно проверить, было ли передано значение для p2 функции или нет? (Я не мог найти функцию isset() или подобные вещи.)

4b9b3361

Ответ 1

Для этого используется функция missing().

f <- function(p1, p2) {
    if(missing(p2)) {
        p2=p1^2
    }
    p1-p2
}

В качестве альтернативы вы можете установить значение p2 равным NULL по умолчанию. Я иногда предпочитаю это решение, поскольку он позволяет передавать аргументы вложенные функции.

f <- function(p1, p2=NULL) {
    if(is.null(p2)) {
        p2=p1^2
    }
    p1-p2
}

f.wrapper <-function(p1,p2=NULL){
    p1 <- 2*p1
    f(p1,p2)
}
> f.wrapper(1)
[1] -2
> f.wrapper(1,3)
[1] -1

EDIT: вы можете сделать это технически с помощью missing(), но тогда вам нужно будет включить оператор missing() в f.wrapper.

Ответ 2

Я думаю, что "отсутствует" должен это сделать.

Ответ 3

В подобном случае вы также можете использовать что-то вроде этого:

f <- function(p1, p2 = p1 ^ 2) {
    p1-p2
}

См. часть, посвященную оценке Lazy на http://adv-r.had.co.nz/Functions.html