Quand on applique un tapply, il nous renvoie un array. Ce faisant, il change le type de nos données initiales. Existe-t-il un outil qui nous retournerait un objet du meme type que ce qu'on utilise ?
Exemple qui me pose problème :
Code : Tout sélectionner
###Les cat ne sont la que pour le débugage
Lmedian <- function(variable){cat("G");UseMethod("Lmedian")}
Lmedian.numeric <- function(variable){cat("N");median(variable,na.rm=TRUE)}
Lmedian.ordered <- function(variable){
cat("O");
sort(variable)[floor((length(variable)+1)/2)]
}
Lmedian.formula <- function(variable){cat("F");
xGauche <- eval(variable[[2]],envir=parent.frame(n=1))
xDroite <- eval(variable[[3]],envir=parent.frame(n=1))
return(tapply(xGauche,xDroite,Lmedian))
}
### Tests :
groupe <- rep(c("A","B","C"),time=7)
bac <- ordered(rep(c("R","AB","AB","P","B","F","B"),time=3),level=c("R","P","AB","B","TB","F"))
Lmedian(bac)
# [1] AB
# Levels: R < P < AB < B < TB < F
Lmedian(bac~groupe)
# A B C
# 3 3 3
Le Lmedian de bac marche et retourne un ordered, mais le Lmedian de bac en fonction des groupes retournes un array de numeric (et donc 3 3 3) au lieu d'un ordered (dans ce cas : AB AB AB)
Des idées ?
Christophe