2010-09-06 3 views
6

J'ai trouvé ce post depuis un an, et j'utilise R version 2.11.1 (2010-05-31), mais je reçois toujours des messages d'erreur sans les numéros de ligne.R numéros de ligne de script à l'erreur?

Une solution?

+0

Je reçois des messages d'erreur avec des numéros de ligne. Comment chargez-vous vos scripts? – Shane

+0

@Shane J'utilise Rscript. Comment chargez-vous vos scripts? –

+0

J'utilise source() depuis l'interface graphique de Windows. – Shane

Répondre

6

Les réponses données ici sont encore valides. Renvoyer des numéros de ligne à partir d'un script n'est pas si simple, mais R peut vous donner beaucoup plus d'informations sur l'endroit où l'erreur peut être trouvée.

Vous pouvez utiliser les options d'erreur pour enregistrer les informations dans un fichier, par exemple:

options(error = quote({ 
    sink(file="error.txt"); 
    dump.frames(); 
    print(attr(last.dump,"error.message")); 
    traceback(); 
    sink(); 
    q()})) 

La fonction findLineNum() peut être utilisé si vous avez le nom du fichier disponible quelque part. Si vous avez le message d'erreur, vous pouvez faire quelque chose comme:

dump.frames() 
x <- attr(last.dump,"error.message") 
ll <- gsub("Error in (.*) : .*","\\1",x) 
lln <- findLineNum(srcfile,ll) 
+6

+1 Merci, c'est un peu décevant qu'il ne soit pas encore implémenté par défaut dans R. Cela me semble être une fonctionnalité très souhaitable. –

+0

Cela n'aide pas si l'erreur est au niveau supérieur d'un script R. –

0

Dans le prochain R 2,14, l'équipe de base progresse vers la mise en œuvre de cette fonction. Les fonctions des scripts chargés source(file=..., keep.file=TRUE) contiennent un attribut srcref, qui identifie la plage de caractères correspondant à la définition de la fonction dans une copie en mémoire du fichier source stocké en tant qu'objet de la classe srcfilecopy.

Ceci ne fournit pas immédiatement un débogage au niveau de la ligne, mais vous permet d'obtenir des numéros de ligne approximatifs si vous êtes prêt à vous salir les mains. Aussi, c'est un progrès.

Questions connexes