Próbuję napisać program, który pobiera wyrażenie jako dane wejściowe i zwraca funkcję z tym wyrażeniem, związanym jako jego treść.Przechwytywanie wyrażenia jako treść funkcji w R
caller <- function (expr, params) {
Function <- function (params, body, env = parent.frame()) {
# returns a function
}
Function(params, body = expr)
}
func <- caller (a + b, c('a', 'b'))
func(1, 2)
[1] 3
mogę powiązać parametry dość łatwo, za pomocą coś jak
params <- c('a', 'b')
f <- function() {}
formals(f) <- structure(
replicate(length(params), NULL),
names = params
)
Mam problemy wymyślanie sposób dynamicznie dodanie wyrażenia jako ciała. Próbowałem użyć substitute() i dostosowywanie make_function z biblioteki pryr, ale nie mogę w pełni sprawić, żeby wszystko działało. Moja najlepsza próba to:
body(f, parent.frame()) <- as.list(match.call())[-1]$body
Nie mogłem tego użyć z substytutem. Wszelkie przemyślenia na temat wiązania ciała w taki sposób, aby najwyższy program działał zgodnie z oczekiwaniami?
Widziałem similar questions na SO, ale rozwiązania nie wydają się zaspokoić ten problem.
dziękuję :) podoba mi się twoje rozwiązanie do dodawania parametrów bez domyślnego argumentu – RyanGrannell
Wygląda na to, że 'g (a + b, a, b = a)' nie działa, ponieważ twój kod przekształca drugi argument funkcji na po prostu 'a' . Myślę, że lepiej nie przekształcać żadnych nazwanych argumentów. –