Définition de méthode avec changement de type...

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Christophe Genolini
Messages : 698
Enregistré le : 12 Juin 2006, 21:37
Contact :

Définition de méthode avec changement de type...

Messagepar Christophe Genolini » 02 Mai 2007, 14:50

Bonjour

Je suis en train d'essayer de programmer une méthode générique et R me sort des résultats abérants.

Code : Tout sélectionner

##################################
# Définition des données test
v1<-1:12         # la classe de v1 est "integer"
v2<-c(1:12,3)  # la classe v2 est "numeric"


####################################
# Affichage débuggage
catD <- function(...){cat(...)}


####################################
# fonction générique, avec son shortcut

r2latexUniv <- function(data,classes=NA,name="",fichier=""){
                 catD("r2latexUniv : class AVANT = ",class(data),"\n")
                 catD("r2latexUniv : classes = ",classes,"\n")
  if (class(data)!="data.frame" && !is.na(classes)){
                 catD("r2latexUniv : on change la classe\n");
    class(data)<- classes
  }
                 catD("r2latexUniv : class APRES = ",class(data),"\n")
                #  UseMethod('r2latexUniv',data)
}


## Test
a <- r2latexUniv
a(v1,classes="numeric")
a(v2,classes="integer")
a(v1,classes="numeriq")


Le résultat est le suivant :

Code : Tout sélectionner

> a(v1,classes="numeric")
r2latexUniv : class AVANT =  integer
r2latexUniv : classes =  numeric
r2latexUniv : on change la classe
r2latexUniv : class APRES =  integer

> a(v2,classes="integer")
r2latexUniv : class AVANT =  numeric
r2latexUniv : classes =  integer
r2latexUniv : on change la classe
r2latexUniv : class APRES =  integer

> a(v1,classes="numeriq")
r2latexUniv : class AVANT =  integer
r2latexUniv : classes =  numeriq
r2latexUniv : on change la classe
r2latexUniv : class APRES =  numeriq


Théoriquement, quand l'arguement "classes" est non vide et n'est pas un data.frame, "class APRES" devrait prendre la valeur de "classes". Ca marche bien pour n'importe quelle valeur (classes="integer" ou classes="numeriq" sur l'exemple), mais pas avec classes="numeric"...
Quelqu'un sait pourquoi ? De mon point de vue, ca fait un peu tour de magie...

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Messagepar Logez Maxime » 02 Mai 2007, 15:13

Bonjour,

Je ne sais pas trop d'où peut provenir le problème peut être du type de v1 : typeof(v1 ) "integer" et de la façon dont sont gérer les integer. Peut être devrais tu rajouté une condition sur la class de data si celle-ci est un integer et que tu veux la transformer en numeric.

Maxime

Christophe Genolini
Messages : 698
Enregistré le : 12 Juin 2006, 21:37
Contact :

Messagepar Christophe Genolini » 03 Mai 2007, 09:58

Je ne cherche pas une "astuce" mais plus une réponse de fond pour une programmation propre : j'ai écris un programme, il ne fait pas se que je voudrais qu'il fasse. Ou est le problème :

- Est-ce une erreure de programmation de ma part du a une mauvaise maitrise de R ?
- Est-ce un bug de R ?

Dans le premier cas, je corrige, dans le second, je signale.


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité