web-dev-qa-db-fra.com

Différence Rstudio entre l'exécution et la source

J'utilise Rstudio et je ne sais pas en quoi les options "exécuter" et "source" sont différentes.

J'ai essayé de googler ces termes, mais "source" est un mot très courant et je n'ai pas pu obtenir de bons résultats de recherche :(

enter image description here

40
user2543622

Run et source ont des significations subtilement différentes. Selon RStudio documentation ,

La différence entre l'exécution de lignes à partir d'une sélection et l'appel de Source est que lorsque vous exécutez une sélection, toutes les lignes sont insérées directement dans la console tandis que pour Source, le fichier est enregistré dans un emplacement temporaire puis sourced dans la console à partir de là (créant ainsi moins d'encombrement dans la console).

Il faut savoir que les fonctions de sourcing dans les fichiers les rendent disponibles pour les scripts. Qu'est-ce que ça veut dire? Imaginez que vous essayez de dépanner une fonction appelée à partir d'un script. Vous devez source le fichier contenant la fonction, pour que les modifications disponibles dans la fonction soient utilisées lorsque cette ligne du script est alors run.

Un autre aspect de ceci est que vous pouvez source fonctions à partir de vos scripts. J'utilise ce code pour générer automatiquement toutes les fonctions d'un répertoire, ce qui facilite l'exécution d'un long script avec un seul run:

# source our functions
code.dir <- "c:\temp"
code.files = dir(code.dir, pattern = "[.r]")
for (file in code.files){
  source(file = file.path(code.dir,file))
}
29
Andy Clifton

Parfois, pour des raisons que je ne comprends pas, vous obtiendrez un comportement différent selon que vous sélectionnez toutes les lignes de code et appuyez sur le bouton Exécuter ou allez dans le menu de code et choisissez `` source ''. Par exemple, dans un cas spécifique, l'écriture d'un gplot dans un fichier png a fonctionné lorsque j'ai sélectionné toutes mes lignes de code, mais l'écriture a échoué lorsque je suis allé dans le menu de code et choisi `` source ''. Cependant, si je choisis "Source avec Echo", je peux à nouveau imprimer dans un fichier png.

Je signale simplement une différence ici que j'ai vue entre la sélection et l'exécution de toutes vos lignes et votre code et aller dans le menu de code et choisir `` source '', au moins dans le cas lorsque vous essayez d'imprimer un gplot dans un fichier png.

6
Christopher Skyi

Une implication importante de la réponse de @ AndyClifton est:

points d'arrêt Rstudio fonctionne dans source (Ctrl-Maj-S) mais pas dans run (Ctrl-Entrée)

Vraisemblablement, la raison en est qu'avec run, le code est transmis directement dans la console sans prise en charge d'une soumission partielle.

Cependant, vous pouvez toujours utiliser browser() avec run.

print() à la console est prise en charge dans debugSource (Ctrl-Shift-S) ainsi que run.

6
C8H10N4O2

Le bouton "exécuter" exécute simplement la ou les lignes sélectionnées. Le bouton "source" exécutera tout le document actif. Mais pourquoi ne pas simplement les essayer et voir la différence?

3

Run exécutera chaque ligne de code, ce qui signifie qu'elle frappe Entrée au début de chaque ligne, ce qui imprime la sortie sur la console. La source n'imprimera rien sauf si vous sourcez avec echo, ce qui signifie que ggplot n'imprimera pas sur pngs, comme un autre posté l'a mentionné.

1
Julian Zucker

Lorsque vous utilisez RSTudio, vous pouvez appuyer sur le bouton Exécuter dans la section de script - il exécutera la ligne sélectionnée. À côté, vous avez le bouton de réexécution pour relancer la ligne. et le bouton source à côté de lui exécutera des morceaux entiers de code.

J'ai trouvé une vidéo sur ce sujet:

http://www.youtube.com/watch?v=5YmcEYTSN7k

0
user3771476

Je viens également de découvrir que l'encodage utilisé pour lire la fonction source peut également être différent si vous sourcez le fichier ou si vous ajoutez la fonction du fichier source à votre environnement avec Ctrl+Enter!

Dans mon cas, il y avait une expression régulière avec un caractère spécial (µ) dans ma fonction. Lorsque j'importais la fonction directement (Ctrl+Enter), Tout fonctionnait, alors que j'avais une erreur lors de l'approvisionnement du fichier contenant cette fonction.

Pour résoudre ce problème, j'ai spécifié l'encodage du fichier source dans la fonction source (source("utils.R", encoding = "UTF-8")).

0
jkd