web-dev-qa-db-fra.com

les tracés ggplot dans les scripts ne s'affichent pas dans Rstudio

J'ai un problème étrange avec Rstudio: si un script appelle des fonctions ggplot2 pour afficher un tracé, utiliser Source pour exécuter le script ne produit pas les graphes. Si je sélectionne le script entier avec Ctrl+A, puis Exécuter la ligne ou la sélection actuelle (Ctrl+Enter), le tracé ne s'affiche. De même, taper des commandes de traçage dans la console produit une sortie correcte.

Par exemple:

library(ggplot2)

p = ggplot(mtcars, aes(wt, mpg))
p + geom_point()

Ne produira une sortie que si elle est collée dans la console, pas si elle est obtenue.

Il y a d'autres questions à ce sujet, mais aucune n'est utile:

Comment puis-je obliger Rstudio à afficher des graphiques lorsqu'un script est créé? J'utilise Rstudio 0.98.1062 et R 3.1.1.

60
Superbest

Je me suis récemment rendu sur cette question et me suis rendu compte que la méthode la plus récente consiste à appeler show(p) après la création de l'intrigue.

0
Superbest

La solution consiste à appeler explicitement print() sur l'objet ggplot:

library(ggplot2)

p <- ggplot(mtcars, aes(wt, mpg))
p <- p + geom_point()
print(p)

ggplot fonction retourne un objet de la classe ggplot; ggplot2 fonctionne en surchargeant la fonction print pour qu'elle se comporte différemment sur les objets de la classe ggplot. Au lieu de les imprimer sur STDOUT, elle crée un graphique.

Tout fonctionne bien en mode interactif, car R suppose que la plupart des commandes sont exécutées via la fonction print(). Ceci est pour notre commodité et nous permet de taper rnorm(1) et d’obtenir une sortie visible. Lorsque la commande Exécuter la sélection en cours est utilisée (Ctrl+Enter), RStudio se comporte comme si chaque ligne sélectionnée était tapée en mode interactif et exécutée. Vous pouvez le vérifier en consultant l'historique de vos commandes dans le volet Console après avoir exécuté quelques lignes sélectionnées.

Mais ce mode pratique est abandonné lorsque le fichier est lu par source(). Etant donné que cette fonction est destinée à exécuter des scripts R (potentiellement longs et coûteux en calcul), il n'est pas souhaitable de polluer STDOUT avec des messages de faible priorité. C'est pourquoi source() par défaut ne produira qu'un message d'erreur. Si vous voulez autre chose, vous devez le demander explicitement.

96
Mirosław Zalewski

bien que ce soit une question assez ancienne. J'ai eu le même problème et j'ai trouvé une solution rapide si vous voulez utiliser le bouton "source" dans la boîte de dialogue R studio. 

vous pouvez simplement activer "source avec écho" (Ctrl + Maj + Entrée) et le tracé s'affiche comme prévu

14
bcat