Меня интересует, каков «правильный» способ написания функций с необязательными аргументами в 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? До сих пор я остановился на первом подходе, но оба могут иногда чувствовать себя немного "хакерскими".
xy.coords
чтобы увидеть часто используемый подход.