Effectivement le débogage Brillant apps
J'ai un complexe Brillant app répartis sur plusieurs fichiers qui utilise le code de plusieurs paquets. L'application fonctionne lorsque l'exécuter localement dans la R Studio, mais sur mon serveur, il déclenche une erreur générique:
Erreur: je ne sais pas comment convertir un 'x' dans la catégorie "Date"
C'est probablement une simple erreur de programmation, mais de déterminer exactement où que l'erreur est dans le code s'avère difficile.
Comment traquer et corriger la source d'erreurs dans le Brillant apps? Et quels sont les outils disponibles pour le faire de façon systématique?
Il y a eu des discussions sur des problèmes similaires sur Google Groupes.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez réaliser l'enregistrement sur le serveur en utilisant une combinaison de
logging
etshinyjs
.Dans votre interface utilisateur.R, lier
shinyjs
à l'aide deshinyjs::useShinyjs
:Dans votre serveur.R, ajouter
logjs
de la liste du journal des gestionnaires:Puis d'imprimer quelque chose, utilisez
loginfo
.Autres Conseils
Lors de l'exécution de votre application en local, comme de RStudio, utilisez
options(shiny.error = browser)
ouoptions(shiny.error = recover)
pour identifier la source des erreurs.Mettre autant de logique métier dans des packages et des scripts externes que possible. Unité de test à chaque fois que vous pensez qu'ils sont à l'origine de problèmes. Le
testthat
paquet peut vous aider ici.Si vous vous attendez à une variable pour répondre à certaines contraintes, ajouter une assertion. Par exemple, si
x
devrait être unzoo
, mettreassert_that(is.zoo(x))
près du haut de votre réactif.Méfiez-vous de la valeur par défaut
drop
comportement. Prenez l'habitude de préciserdrop = F
chaque fois que vous voulez que votre résultat à undata.frame
.Essayer de minimiser le nombre de variables (options, l'environnement, la mise en cache de l'INTERFACE utilisateur de l'état, etc.) qu'une unité de code dépend. Faiblement typé langues sont assez difficile à déboguer déjà!
Utiliser de façon appropriée les S4 et S3 classes au lieu de raw R structures où possible.
dput
vous permettra d'examiner la structure interne des objets, et est très utile lorsque vous essayez de reproduire les erreurs en dehors d'une application.Essayer de faire le débogage dans une console interactive, en n'utilisant pas
print
l'intérieur d'une application. Cela vous permettra d'effectuer une itération plus rapidement. Lors du débogage à l'extérieur d'une application n'est pas possible, essayez de mettre unbrowser()
appel juste avant le code de problème.Jamais utilisation
sapply
non interactif code. Avec une sortie vide, il lui sera impossible de déduire le type que vous souhaitez et retourner un videlist
. Si votre résultat devrait être unvector
, utilisezvapply
. Si votre résultat devrait être unlist
, utilisezlapply
.Vous devriez aussi regarder Le Débogage Des Applications Brillant de la RStudio de l'équipe.
Je suis surpris que le RStudio Brillant de débogage de l'article n'est pas mentionné. Cet article est très complet au débogage et de traitement d'erreur.
Vous pouvez consulter le journal de votre serveur, ce qui devrait permettre de résoudre la question posée par l'OP plus directement.
Problème de la Date:
Le côté serveur peut être à l'aide d'un système d'exploitation différent, avec un autre jeu de caractères par défaut l'encodage (par exemple, "latin1", "utf-8"). Parfois, le chargement des données dans R perd de l'encodage. La fonction de lecture.csv est un paramètre encoding="UTF-8", que vous pouvez utiliser.
De debug, je me suis appuyé sur les instructions d'impression. Je suis aussi intéressé de savoir si d'autres ont trouvé une manière plus systématique.
print
états à s'afficher dans le navigateur de la console?