Мене цікавить, що є "правильним" способом запису функцій з необов'язковими аргументами в Р. З часом я натрапив на кілька фрагментів коду, які приймають тут інший маршрут, і я не зміг знайти належне (офіційне) положення на цю тему.
До цих пір я писав такі необов'язкові аргументи:
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
щоб побачити загальновживаний підхід.