Utilisation 'attributes(x) <- ' dans long code pour stocker metadata

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

Bastien Gamboa
Messages : 151
Enregistré le : 13 Jan 2011, 21:31

Utilisation 'attributes(x) <- ' dans long code pour stocker metadata

Messagepar Bastien Gamboa » 03 Nov 2017, 14:48

Bonjour,

Désolé pour le titre, je ne parviens pas à faire un titre plus explicite.

Dans un gros programme, que ce soit un long code R, plusieurs fichier .R, une grosse appli shiny, ou tout autre utilisation de R créant de nombreux objets et fonctions il est parfois difficile (surtout lors de l'update quelques temps après) de se rappeler les dépendances, utilisations, caractéristiques et nécessités de tous les objets R. Pour l'instant j'utilise les commentaires pour expliciter chaque bloc de code et je les rend les plus indépendant possible. Mais je ne trouve pas ça optimal.

De fait je me pose la question s'il serait utile et safe d'utiliser les attributs des objets R pour stocker ces informations.

Code : Tout sélectionner

attributes(x) <- list(description="description de l'objet",
                      used=c("truc1", "toto"),
                      depends=c("machin", "f1()"), ...)

Avec microbenchmark et un tout petit test, la performance n'est pas impactée pour les quelques fonctions utilisées :

Code : Tout sélectionner

x <- runif(1e3)
y <- runif(1e3)
attributes(x) <- list(description="description de l'objet",
                      used=c("truc1", "toto"),
                      depends=c("machin", "f1()"))

f1 <- function() mean(x) + sum(x) + length(x)
f2 <- function() mean(y) + sum(y) + length(y)

microbenchmark::microbenchmark(f1(), f2(), times=100)
> Unit: microseconds
>  expr    min     lq     mean median     uq     max neval cld
>  f1() 11.495 12.522 14.41892 13.549 13.959  76.772   100   a
>  f2() 11.495 12.727 16.12667 13.548 13.959 266.444   100   a

Il reste le coté sécuritaire. Je ne connais pas bien les attributs, surtout ceux qui ne correspondent à rien (donc hors dim, dimnames, ...). Savez-vous si l'ajout d'attributs à certains objets R (vector, matrix, lists, functions) peut impacter quelque autre action que ce soit (stabilité d'une fonction, d'un objet, propagation des attributs non-voulue, changement de classe de l'input/output ...) ?

Si rien ne s'y oppose il pourrait ensuite être intéressant que les slots 'used' et 'depends' se remplissent automatiquement via une fonction dédiée, et donc une autre question est : savez-vous si une fonction de ce type existe ?

Bien sûr si vous avez des conseils/astuces pour la thématique hors usage des attributs ils sont les bienvenus !

Merci,
Bastien

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: Utilisation 'attributes(x) <- ' dans long code pour stocker metadata

Messagepar Pierre-Yves Berrard » 06 Nov 2017, 13:18

Bonjour,

Juste une remarque : une chose à ne pas perdre de vue avec les attributs, c'est qu'ils sont supprimés lors de la modification d'un vecteur / matrice / data.frame (sauf names, class et dim).

Et vu que tu parles de "slots", on a envie de penser à la programmation objet. R propose 3 systèmes (S3, S4, RC + package R6). Peut-être que l'un d'eux répondrait à ton besoin (peut-être c'est beaucoup trop lourd pour ce que tu veux faire).
PY

jean lobry
Messages : 733
Enregistré le : 17 Jan 2008, 20:00
Contact :

Re: Utilisation 'attributes(x) <- ' dans long code pour stocker metadata

Messagepar jean lobry » 13 Nov 2017, 19:33

Bonjour,

mon conseil serait de faire un paquet R, pas forcément publié sur le CRAN, dès que cela devient un peu gros pour bénéficier des outils de vérification automatiques.

Bien amicalement,

jean lobry


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité