Sto riscontrando qualche problema con la funzione apply che passa gli argomenti a una funzione quando non è necessaria. Capisco che applicare non sappiano cosa fare con gli argomenti opzionali e basta passarli sulla funzione.Non si applicano tutti gli argomenti facoltativi in applicazione
Ma tant'è, qui è quello che vorrei fare:
Prima di tutto voglio specificare un elenco di funzioni che vorrei utilizzare.
functions <- list(length, sum)
Quindi vorrei creare una funzione che applica queste funzioni specificate su un set di dati.
myFunc <- function(data, functions) {
for (i in 1:length(functions)) print(apply(X=data, MARGIN=2, FUN=functions[[i]]))
}
Questo funziona correttamente.
data <- cbind(rnorm(100), rnorm(100))
myFunc(data, functions)
[1] 100 100
[1] -0.5758939 -5.1311173
Ma vorrei anche utilizzare argomenti aggiuntivi per alcune funzioni, ad es.
power <- function(x, p) x^p
Quali non funzionano come voglio. Se modifico myFunc
a:
myFunc <- function(data, functions, ...) {
for (i in 1:length(functions)) print(apply(X=data, MARGIN=2, FUN=functions[[i]], ...))
}
functions
come
functions <- list(length, sum, power)
e quindi provare la mia funzione ho
myFunc(data, functions, p=2)
Error in FUN(newX[, i], ...) :
2 arguments passed to 'length' which requires 1
Come posso risolvere questo problema?
Ci scusiamo per il muro di testo. Grazie!