11
votes

Comment puis-je soigneusement nettoyer mon espace de travail R tout en préservant certains objets?

Supposons que je joue avec quelques données par des vecteurs contraignants ensemble, car je ne vais pas faire sur un dimanche après-midi paresseux. XXX PRE>

J'ai maintenant mon nouveau Dataframe DD code>, ce qui est merveilleux. Mais il y a aussi toujours le détritus de mes ficelles antérieures et mes dicings: p> xxx pré>

Quel est un moyen simple de nettoyer mon espace de travail si je n'ai plus besoin de mes colonnes "source", mais je Voulez-vous garder le Dataframe? C'est-à-dire que j'ai fini de manipuler des données, je voudrais juste avoir dd code> et aucune des variables plus petites susceptibles de masquer par inadvertance une analyse ultérieure: P>

    > ls()
    [1] "dd"


0 commentaires

3 Réponses :


11
votes

Voici une approche utilisant setDiff : xxx


7 commentaires

@RCS - C'est assez intelligent. Mon problème est-il quelque chose de courant dans le nettoyage des données? J'imaginais que ça devait être, mais peut-être que c'est parce que je suis novice. Est-il étrange d'avoir un peu interactif de tranche N dés, suivi de la nécessité de nettoyer les bits qui ne sont plus nécessaires?


Je trouve que pour être très courant, j'aime avoir un espace de travail de garniture


Je n'utilise jamais rm . Cela n'a généralement pas d'importance que vous avez quelques pièces intermédiaires situées - si cela se produise beaucoup, c'est probablement un signe que vous devriez créer une fonction.


Je pense que @ Hadley a raison. Mon inquiétude était que les avoir à mentir autour pourrait masquer d'autres analyses que je fais. Voici un exemple. CaseID <- 1:25 Hauteur <- RNorm (25, moyenne = 150, SD = 15) HD <- Data.frame (Castid, Hauteur) HD <- HD [- 7),] # Suppression d'une bibliothèque de cas (GGPLot2 ) QPLOT (x = casid, y = hauteur, données = HD) # parcelle 25 points dans les lignes initiales, je veux donner des noms de variables significatifs. Mais ensuite, ces variables mondiales semblent masquer les habitants locaux sur le Dataframe dans mon appel de la parcelle. Je suppose que cela signifie que je dois adopter une meilleure pratique?


Je suis désolé que mon code ci-dessus ne soit pas formaté correctement. Je ne peux pas sembler obtenir Markdown pour coopérer :-(


Les variables globales ne masquent pas de variables locales dans QPLOT.


@RCS Et si je veux avoir seulement deux objets DD et JJ?



0
votes

Puisque j'ai oublié que les commentaires ne soutiennent pas la mise en forme complète, je voulais répondre à la recommandation de Hadley ici. Une partie de mon code existant - peut-être surnombily - a tendance à travailler comme ceci: xxx

dans le code ci-dessus, qplot () tracera 25 points, et je pense que c'est parce que mes variables globales CaseID et Hauteur masquent sa tentative d'y accéder localement à partir du Dataframe fourni. Donc, le cas que j'ai retiré semble toujours être tracé, car il apparaît dans les variables globales, bien que pas le Dataframe HD au moment de la qplot () appel.

Mon sens est que ce comportement est totalement prévu et que la réponse est que je suis à la suite d'une pratique de codage sous-optimale. Alors, comment puis-je commencer à écrire du code qui évite ces types de collisions par inadvertance?


4 commentaires

Hmm ... je ne pense pas que c'est ce qui se passe. Par exemple, j'ai fait un HD2 qui n'avait que dix rangées de HD. Si le casseid global et la hauteur masquaient-ils dans le QPLOT (), cela importerait-il de l'argument de données, non? Mais j'ai définitivement 10 points avec HD2.


2. Si vous faites de la cassed et de la hauteur explicitement pour entrer dans les données.frame et n'en avez jamais besoin comme leurs propres vecteurs, vous pouvez faire HD <- data.frame (CaseID = 1:25, Hauteur = RNorm ( 25, moyenne = 150, SD = 15)) .


@Matt - Ce sont de grandes suggestions. Parfois, je ne peux pas les générer in situ dans la commande data.frame, cependant, je pense que FotJasek a cloué une bonne solution. En dehors de la curiosité, pouvez-vous partager votre code qui génère seulement dix points de données?


Bien sûr - je viens de modifier votre sous-ensemble de HD: HD <- HD [- (1:15),] puis a exécuté votre ligne QPLOT. Revenez-y frais ce matin, j'ai oublié d'énoncer explicitement la partie "Data =" de données = HD, et cela m'a donné 25 points parce que qplot ne savait pas quoi faire avec HD.



12
votes

Je m'approcherais en faisant un environnement séparé dans lequel stocker toutes les variables de la malbouffe, ce qui rend votre trame de données à l'aide de avec () code>, puis copiez celles que vous souhaitez conserver dans l'environnement principal. Cela a l'avantage d'être bien rangé, mais de garder tous vos objets au cas où vous voudrez les regarder à nouveau.

> ls()
[1] "dd"   "temp"
> with(temp,ls())
[1] "dd" "x"  "y"  "z" 


1 commentaires

Ou utilisez local comme dd <- local ({x <-....; data.frame (mscore = x, ...)}) et il n'y a pas de TEMP . local renvoie la dernière expression afin que la dernière ligne doit renvoyer dd .