У меня есть функция, которая имеет аргумент arg
, который может отсутствовать. Если он отсутствует, ему присваивается определенное значение в пределах foo
.Передача аргумента из обертки во внутреннюю функцию, когда аргумент может отсутствовать во внутренней функции - возможно?
foo <- function(x, arg) {
if (missing(arg))
arg <- TRUE
arg
}
Я хочу, чтобы написать оболочку, которая вызывает foo
для нескольких элементов списка с помощью sapply
или lapply
. И я хочу передать аргумент arg
следующим образом.
foo_wrapper <- function(x, arg) {
sapply(x, foo, arg=arg)
}
Это будет сгенерировано сообщение об ошибке, как arg
не найден, когда она оценивается в пределах foo_wrapper
.
> m <- list(1,2,3)
> foo(m)
[1] TRUE
> foo_wrapper(m)
Error in FUN(X[[1L]], ...) : argument "arg" is missing, with no default
Теперь, я мог бы использовать dots
аргументы для этой цели, которая будет работать.
foo_wrapper <- function(x, ...) {
sapply(x, foo, ...)
}
> m <- list(1,2,3)
> foo(m)
[1] TRUE
> foo_wrapper(m)
[1] TRUE TRUE TRUE
Тем не менее, я хотел бы знать, если есть способ включить arg
аргумент в функции упаковщика в явном виде, а не передавать его через dots
аргумент.
Есть ли способ?
Если вы специально не хотите значения по умолчанию, вы можете написать 'foo_wrapper <-function (x, arg = 0)' –
Или, если быть точным, 'arg = TRUE', поскольку это значение по умолчанию во внутренней функции –
Проблема в том, что я хочу, чтобы те же значения по умолчанию, что и внутренняя функция, и их нет :) –