Полагаю, можно было бы организовать do.call()
для вызова анонимной функции:
tmp <- switch("b",
a = print("foo"),
b = do.call(function() paste("I want to evaluate this one!"),
list()),
stop("say what now?")
)
Например:
> tmp
[1] "I want to evaluate this one!"
Редактировать Прощеверсия выше:
tmp <- switch("b",
a = print("foo"),
b = (function() paste("I want to evaluate this one!"))(),
stop("say what now?")
)
Таким образом, анонимная функция создается в первом наборе скобок, и результирующая функция вызывается добавлением второго набора ()
.
Но мне кажется чище превратить анонимную функцию в именованную функцию и вызвать ее:
foo <- function() paste("I want to evaluate this one!")
tmp <- switch("b",
a = print("foo"),
b = foo(),
stop("say what now?")
)
, которая имеет тот же конечный результат:
> tmp
[1] "I want to evaluate this one!"
Если это всевнутри функции foo()
может быть определено как встроенное, поэтому оно существует только во время выполнения вызова внешней функции.