Обычно лучше всего хранить ...
аргументов в списке, а затем обращаться к ним с использованием имен аргументов. Это похоже на то, что вы видите в **kwargs
в python. Например:
f1 = function(x,y){
}
f2 = function(...){
arguments = list(...)
do.something = f1(x=argumetns$x, y = arguments$y)
}
Конечно, недостатком этого является то, что не совсем понятно, с какими именами следует передавать аргументы. Один из способов решить эту проблему - предоставить исчерпывающую документацию, иначе вы можете проверить, что аргументы были переданы перед выполнением функции.
Например, вы можете убедиться, что пользователь передал аргумент x
, прежде чем делать вызов функции выглядит примерно так:
f2 = function(...){
arguments = list(...)
if(is.null(arguments$x) || is.null(arguments$y)){
stop('f2 missing the value for argument x or y')
} #this will halt the execution and alert the user of missing x or y argument
do.something = f1(x = arguments$x, y = arguments$y)
}
Я обнаружил, что использование is.null()
для проверки отсутствующих аргументов очень полезно. Если пользователь не предоставил конкретный аргумент, скажем x
, то is.null(arguments$x)
вернет TRUE
.