Per il momento, almeno, questo è un esercizio di apprendimento per me, quindi le funzioni effettive o la loro complessità non sono il problema. Supponiamo di scrivere una funzione il cui elenco di argomenti include alcune variabili di input e un nome di funzione, passati come una stringa. Questa funzione calcola alcune variabili internamente e "decide" come inviarle al nome della funzione che ho passato.Come recuperare le formali di una funzione primitiva?
Per le funzioni non primitive, posso fare (per questo esempio, supponiamo che le mie funzioni funcname
abbiano argomenti . diversa al massimo (x,y,z)
Se lo facessero, avrei dovuto scrivere del codice per la ricerca per la corrispondenza names(formals(get(funcname)))
in modo da non eliminare gli altri argomenti):
foo <- function (a,b,funcname) {
x <- 2*a
y <- a+3*b
z <- -b
formals(get(funcname)) <- list(x=x, y=y, z=z)
bar <- get(funcname)()
return(bar)
}
e la cosa bella è, anche se la funzione funcname
verrà eseguito senza errori anche se non utilizza x
, o z
(a patto che non ci sono altri argomenti che non hanno valori predefiniti).
Il problema con le funzioni "primitive" è che non conosco alcun modo per trovare o modificare le loro formali. Altro che scrivere un wrapper, ad es. foosin <-function(x) sin(x)
, c'è un modo per impostare la mia funzione foo
per lavorare con nomi di funzioni sia primitive che non primitive come argomenti di input?
Qualcuno recentemente suggerito che uso 'formali (args (FUN)) 'per ottenere le formali di un primitivo. –