Mam do czynienia z pewnym problemem z funkcją stosującą przekazywanie argumentów do funkcji, gdy nie jest to konieczne. Rozumiem, że zastosowanie nie wiem, co zrobić z opcjonalnymi argumentami i po prostu przekazać je do funkcji.Nie przekazuję wszystkich opcjonalnych argumentów w zastosowaniu
Ale tak czy inaczej, tutaj jest to, co chciałbym zrobić:
Najpierw chcę określić listę funkcji, które chciałbym użyć.
functions <- list(length, sum)
Następnie chciałbym utworzyć funkcję, które znajdują zastosowanie tych określonych funkcji na zbiorze danych.
myFunc <- function(data, functions) {
for (i in 1:length(functions)) print(apply(X=data, MARGIN=2, FUN=functions[[i]]))
}
To działa dobrze.
data <- cbind(rnorm(100), rnorm(100))
myFunc(data, functions)
[1] 100 100
[1] -0.5758939 -5.1311173
Chciałbym jednak użyć dodatkowych argumentów dla niektórych funkcji, np.
power <- function(x, p) x^p
Które nie działają tak, jak chcę. Gdybym modyfikować myFunc
do:
myFunc <- function(data, functions, ...) {
for (i in 1:length(functions)) print(apply(X=data, MARGIN=2, FUN=functions[[i]], ...))
}
functions
jak
functions <- list(length, sum, power)
a następnie spróbować swoich funkcji otrzymuję
myFunc(data, functions, p=2)
Error in FUN(newX[, i], ...) :
2 arguments passed to 'length' which requires 1
Jak mogę rozwiązać ten problem?
Przepraszamy za ścianę tekstu. Dziękuję Ci!