У меня есть несколько функций, которые передают аргументы, которые могут отсутствовать.
например. я
mainfunction <- function(somearg) {
mytest(somearg)
fun <- function() { subfunction(somearg) }
fun()
}
с интересным аспектом, что единственное взаимодействие mytest(somearg)
с аргументом arg состоит в том, что он проверяет отсутствие аргумента:
mytest = function(somearg) {
print(missing(somearg))
}
subfunction
затем снова проверяет, не пропадает ли и обрабатывает его соответственно:
subfunction = function(somearg) {
if (missing(somearg))
somearg = NULL
else
somearg = matrix(somearg, cols = 2)
# somearg is used here…
}
кикер состоит в том, что при отсутствии somearg
это не работает: matrix(somearg, cols = 2)
throws
аргумент "somearg" отсутствует, без значения по умолчанию
во время отладки я обнаружил следующее:
- в начале
mainfunction
,missing(somearg)
возвращаетTRUE
- в
mytest
,missing(somearg)
возвращаетTRUE
- в
subfunction
,missing(somearg)
возвращаетFALSE
(!!!!)
поэтому ветвь matrix
попадает, но на самом деле somearg
отсутствует, поэтому он терпит неудачу...
ват.