quelle est la difference de fonctionnement Run / Source

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Marc Schortgen
Messages : 13
Enregistré le : 27 Nov 2015, 13:41

quelle est la difference de fonctionnement Run / Source

Messagepar Marc Schortgen » 17 Mar 2017, 12:47

Bonjour,

J'ai un soucis de fonctionnement sur une partie de script permettant de renommer un objet.

Un exemple

Code : Tout sélectionner

rm( list = ls(  ) )
# creation de l'objet 'mes' dans 'A.rdata'
setwd( "k:/My R space/" )
mes <- list(  a = c(1,2,3,4,5), b = c("a","b","c","d") )
save( mes, file = "A.rdata" )
rm( list = ls(  ) )
cat( "\14" )
# renommage de l'objet 'mes' en 'essai'
setwd( "k:/My R space/" )
file = "A.rdata"
env=parent.frame()
#
tmp<-new.env()
load.names <- load( file, tmp )
Map( assign, "essai", mget( load.names, envir = tmp ), MoreArgs = list( envir = env ) )
ls.str( essai )


Lorsque je lance le script par Source (dans Rstudio), ça ne fonctionne pas, la variable essai n'apparait pas dans l'environnement global.
    $essai
    $essai$a
    [1] 1 2 3 4 5

    $essai$b
    [1] "a" "b" "c" "d"

    > ls.str( essai )
    Error in ls.str(essai) : object 'essai' not found

Lorsque je lance par Run, ça fonctionne correctement.
    $essai
    $essai$a
    [1] 1 2 3 4 5

    $essai$b
    [1] "a" "b" "c" "d"

    > ls.str( essai )
    a : num [1:5] 1 2 3 4 5
    b : chr [1:4] "a" "b" "c" "d"


Quelle est la différence ? , est-ce que je dois rajouter des options ?
Merci.

Victor Cazalis
Messages : 68
Enregistré le : 24 Aoû 2014, 06:19

Re: quelle est la difference de fonctionnement Run / Source

Messagepar Victor Cazalis » 19 Mar 2017, 10:14

Run lance une ligne par une ligne (quand on clique, la ligne sur laquelle est votre curseur est exécutée). Source au contraire lance l'ensemble de votre script.

Je ne comprends pas où vous créez la variable essai dans votre code

Marc Schortgen
Messages : 13
Enregistré le : 27 Nov 2015, 13:41

Re: quelle est la difference de fonctionnement Run / Source

Messagepar Marc Schortgen » 19 Mar 2017, 10:42

Bonjour Victor,

En fait j'exécute le RUN sur l'ensemble du script (CTRL A).

Le script a pour but de collecter des données provenant de différents labos ayant chacun leur nom de fichier. Avant d'exploiter les données, je dois donc les rassembler dans une seule base, si je fais ça manuellement, je dois ouvrir chaque fichier rdata, noter le nom de l'objet qui m' intéresse et reporter le nom dans mon script. Ce qui devient vite chronophage.
J'ai donc décider d'écrire un petit script qui ouvre le fichier rdata dans un environnement temporaire (tmp), de repérer l'objet intéressant (A) et de le transférer dans l'environnement de travail (global.envir) en le renommant (essai).

Ça fonctionne quand je lance le script par RUN mais pas par SOURCE.

Voilà.
Cordialement,
Marc S.

Victor Cazalis
Messages : 68
Enregistré le : 24 Aoû 2014, 06:19

Re: quelle est la difference de fonctionnement Run / Source

Messagepar Victor Cazalis » 19 Mar 2017, 11:43

Je ne connais pas bien ces fonctions donc peut-être que d'autres donneront de meilleurs réponses que moi.

Une différence entre run et source est le fait que run donne le résultat dans la console. Par exemple si vous faites run sur un script contenant 5+2, il vous écrira 7 dans la console, par contre source ne vous affichera pas le résultat (sauf si vous utilisez print).
Peut-être que la fonction Map fonctionne comme ça et ne s'applique vraiment que si elle est explicitée dans la console. Si c'est le cas, la transformer en une commande essai<-..... pour créer plus directement l'objet essai fonctionnera.

C'est une idée que je vous donne comme ça mais je ne suis pas certain qu'elle soit pertinente !

Bon courage, Victor

Didier Plat
Messages : 225
Enregistré le : 02 Nov 2009, 16:47
Contact :

Re: quelle est la difference de fonctionnement Run / Source

Messagepar Didier Plat » 19 Mar 2017, 16:04

Bonjour,
Je vais dans le sens de Victor. Le souci est que l'exécution de run et de source ne se fait pas à partir du même environnement initial, comme l'indique l'aide de source :
Note that running code via source differs in a few respects from entering it at the R command line. Since expressions are not executed at the top level, auto-printing is not done...

L'environnement parent n'est donc pas le même. Ainsi, avec run, la ligne

Code : Tout sélectionner

env=parent.frame()

affecte bien à env l'environnement global. Ce n'est pas le cas avec source. On peut s'en rendre compte en rajoutant après la définition de env :

Code : Tout sélectionner

print(env)

Une façon de solutionner le problème est alors d'assigner directement essai dans l'environnement global (ou de définir env comme l'environnement global) :

Code : Tout sélectionner

Map( assign, "essai", mget( load.names, envir = tmp ), MoreArgs = list( envir = .GlobalEnv) )

Marc Schortgen
Messages : 13
Enregistré le : 27 Nov 2015, 13:41

Re: quelle est la difference de fonctionnement Run / Source

Messagepar Marc Schortgen » 20 Mar 2017, 10:21

Merci à vous deux, cela a résolu mon problème.
Marc.


Retourner vers « Questions en cours »

Qui est en ligne

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