Меня интересует, что такое "правильный" способ записи функций с необязательными аргументами в R. Со временем я наткнулся на несколько фрагментов кода, которые идут по другому пути, и я не мог найти правильную (официальную) позицию по этой теме.
До сих пор я написал необязательные аргументы вроде этого:
fooBar <- function(x,y=NULL){
if(!is.null(y)) x <- x+y
return(x)
}
fooBar(3) # 3
fooBar(3,1.5) # 4.5
Функция просто возвращает свой аргумент, если поставляется только x
. Он использует значение по умолчанию NULL
для второго аргумента, и если этот аргумент не является NULL
, тогда функция добавляет два числа.
В качестве альтернативы можно написать такую функцию (где второй аргумент нужно указать по имени, но можно также unlist(z)
или определить z <- sum(...)
):
fooBar <- function(x,...){
z <- list(...)
if(!is.null(z$y)) x <- x+z$y
return(x)
}
fooBar(3) # 3
fooBar(3,y=1.5) # 4.5
Лично я предпочитаю первую версию. Тем не менее, я вижу хорошее и плохое с обоими. Первая версия немного менее подвержена ошибкам, но вторая может быть использована для включения произвольного количества опций.
Есть ли "правильный" способ указать необязательные аргументы в R? До сих пор я остановился на первом подходе, но оба могут иногда чувствовать себя немного "взломанными".