¿Cómo llamo a la función `function`?
Estoy tratando de llamar a la función`function`
para definir una función en código R.
Como todos sabemos ™ ,`function`
es un.Primitive
que se usainternament by R para definir funciones cuando el usuario usa la sintaxis convencional, es decir,
mean1 = function (x, ...) base::mean(x, ...)
Pero no hay nada que me impida llamar a esa primitiva directamente. @O eso pens. Puedo llamar a otros primitivos directamente (e incluso redefinirlos; por ejemplo, en un momento de locuraYo superé a R's incorporado`for`
). Así que estoe en principio posible.
Sin embargo, no puedo hacer que funcione para`function`
. Esto es lo que probé:
# Works
mean2 = as.function(c(formals(mean), quote(mean(x, ...))))
# Works
mean3 = eval(call('function', formals(mean), quote(mean(x, ...))))
# Error: invalid formal argument list for "function"
mean4 = `function`(formals(mean), quote(mean(x, ...)))
El hecho de quemean3
en particular funciona me indica quemean4
deberí trabajo. Pero no lo hace. ¿Por qué
Revisé la definición de`function`
primitivo en la fuente R. @do_function
se define eneval.c
. Y veo que llama aCheckFormals
, lo que garantiza que cada argumento sea un símbolo, y esto falla. Pero, ¿por qué verifica esto y qué significa eso?
Y lo más importante: ¿hay alguna forma de llamar a`function`
primitivo directamente?
Solo para aclarar: hay soluciones triviales (esta pregunta enumera dos y hay al menos un tercero). Pero me gustaría entender cómo funciona esto (no).