Проверьте, установлен ли аргумент функции или нет в 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()
или подобные вещи.)
Ответы
Ответ 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