Je travaille avec des listes qui contiennent (entres autres) un élément qui peut être :
- Une fonction quelconque
- Un objet pour qui la fonction predict() existe, par exemple un objet de class "lm".
L'idée serait de créer une fonction predict pour la class "function" et ainsi de pouvoir utiliser predict() quelque soit le contenu de la liste (fonction ou modèle).
Exemple pour les deux cas :
Code : Tout sélectionner
# Exemple avec une fonction quelconque
maliste1 <- list(a = 1:10,
b = function(x) - x
)
# Exemple avec objet qui a une méthode pour predict
model <- lm(rnorm(10) ~ runif(10))
maliste2 <- list(a = 1:10,
b = model)
Comme attendu cela fonctionne que dans le deuxième cas :
Code : Tout sélectionner
predict(maliste1$b, newdata = data.frame(maliste1$a))
# Error in UseMethod("predict") :
# no applicable method for 'predict' applied to an object of class "function"
predict(maliste2$b, newdata = data.frame(maliste2$a))
# 1 2 3 4 5 6 7 8 9 10
#-0.29367649 -0.25229627 -0.08782978 -0.18444959 -0.08843830 -0.16306699 -0.18816203 -0.30699163 -0.16526367 -0.26676358
En créant la fonction predict pour la classe "function", cela fonctionne.
Code : Tout sélectionner
predict.function <- function(object, newdata){
object(newdata[[1]])
}
predict(maliste1$b, newdata = data.frame(maliste1$a))
#[1] -1 -2 -3 -4 -5 -6 -7 -8 -9 -10
Est-ce que cela vous parait une "bonne idée" ou est-ce qu'il y aurait des choses auxquelles je n'aurais pas pensé qui rendrait cette pratique "dangereuse" à un moment donné ?
Merci pour votre avis