Qu'est-ce qu'un code reproductible ?

Toutes les annonces relatives au Groupe des Utilisateurs du logiciel R

Modérateur : Groupe des modérateurs

François Bonnot
Messages : 537
Enregistré le : 10 Nov 2004, 15:19
Contact :

Qu'est-ce qu'un code reproductible ?

Messagepar François Bonnot » 19 Oct 2015, 08:08

Les questions posées sur le forum concernent fréquemment une partie de code insérée dans le corps du message.
Malheureusement il est souvent difficile de répondre à la question parce que le code inséré n'est pas reproductible.
Cela a pour conséquence non seulement d'alourdir la discussion par des messages hors du sujet technique ("Quel package utilisez-vous ?", "Je n'arrive pas à reproduire votre sortie", etc.), mais aussi de décourager les membres du forum qui sauraient répondre mais n'ont pas de temps à perdre à deviner ce qui manque dans le code. Pour s'en persuader, il suffit de rechercher le terme "reproductible" sur le forum.

Qu'est-ce qu'un code reproductible ?
Un code reproductible est un code dont l'exécution produit sur tous les ordinateurs une sortie identique à celle produite sur l'ordinateur de celui qui pose la question, sans nécessiter l'exécution préalable d'autres lignes de code.

Dans la plupart des cas, le code est non reproductible parce qu'il y manque des données ou l'indication d'un package.

Exemple 1 NON reproductible:

Code : Tout sélectionner

S <- matrix(0.9,5,5)
diag(S) <- 1
mvrnorm(n=10, rep(1,5), Sigma=S)

Résultat: Error: could not find function "mvrnorm"
(On ne sais pas dans quel package se trouve la fonction mvrnorm)

Exemple 1 reproductible:

Code : Tout sélectionner

library(MASS)
S <- matrix(0.9,5,5)
diag(S) <- 1
mvrnorm(n=10, rep(1,5), Sigma=S)

Exemple 2 NON reproductible:

Code : Tout sélectionner

z <- read.table("courbe.txt", header=TRUE, sep='\t')
xyplot(y~x, data=z)

Résultat: Error in file(file, "rt") : cannot open the connection
cannot open file 'courbe.txt': No such file or directory

Le fichier 'courbe.txt' n'est pas sur le disque...
De plus le package de la fonction xyplot() n'est pas précisé.

Exemple 2 reproductible:

Code : Tout sélectionner

library(lattice)
z <- structure(list(x = 1:10, y = c(0, 0.693147180559945, 1.09861228866811,
1.38629436111989, 1.6094379124341, 1.79175946922805, 1.94591014905531,
2.07944154167984, 2.19722457733622, 2.30258509299405)), .Names = c("x",
"y"), row.names = c(NA, -10L), class = "data.frame")
xyplot(y~x, type='l', data=z)

Pour plus de détails sur la façon d'insérer les données, voir ce lien:
http://forums.cirad.fr/logiciel-R/viewtopic.php?f=1&t=3302
(Ne PAS insérer TOUT son jeu de données mais SEULEMENT un extrait nécessaire et suffisant).

Remarque : un code qui provoque une erreur est reproductible si l'erreur est l'objet de la question.
Exemple 3 (reproductible)
(Question : "Je ne comprends pas cette erreur")

Code : Tout sélectionner

x <- 0
if (x=0) x <- NA

Résultat: Error: unexpected '=' in "if (x="

Ce code est reproductible car l'erreur produite est l'objet de la question.

Comment vérifier qu'un code est reproductible avant de le poster sur le forum ?
C'est très simple:
1) Vérifier que le code ne va lire aucun fichier de données sur disque
2) Sauver le code et quitter R
3) Relancer R et copier-coller le code dans la fenêtre commande

Si le code donne la sortie attendue, il est reproductible.
François

Retourner vers « Annonces »

Qui est en ligne

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

cron