Comment faire pour supprimer la sélection R variables sans avoir à taper leurs noms
Tandis que les essais de simulation dans la R généré de façon aléatoire à l'aide de données d'entrée, j'ai trouvé et corrigé quelques bugs et je voudrais maintenant re-lancer la simulation avec les mêmes données, mais avec toutes les variables intermédiaires retiré pour s'assurer qu'il est propre test.
Est-il un moyen de supprimer plusieurs dizaines sélectionnés manuellement les variables de l'espace de travail sans avoir à:
a) clobber l'ensemble de l'espace de travail, par exemple rm(list=ls())
, ou b) saisissez le nom de chaque variable, par exemple remove(name1, name2, ...)
?
Solution idéale serait d'utiliser ls()
pour inspecter les définitions et puis choisir les indices de ceux que je veux supprimer, par exemple,
ls() # inspect definitions
delme <- c(3,5,7:9,11,13) # names selected for removal
remove(ls()[delme]) # DESIRED SOLUTION -- doesn't quite work this way
(Avec le recul, j'aurais utilisé un fixe de semences afin de générer de façon aléatoire à l'entrée de données, qui permettent de compensation de tout et puis de ré-exécuter le test...)
rm(list=ls()[delme])
pas de travail?si vous utilisez le
gdata
package, puis keep(ls()[-delme], sure = TRUE)
ce qui se passe?Grand qui fonctionne! --- la clé a été
list=
. Juste pour information, pourquoi est-ce que la cession de la liste requise? (PS: si vous voulez le mettre dans une réponse, je suis heureux de l'accepter!)parce que si vous ne le faites pas, il
rm
pense que le premier argument est l'objet à supprimer, par opposition à une liste des noms des objets pour les supprimer (comparer rm(a, b)
vs rm(list=c("a", "b"))
)Ok, ça a du sens. Cheers!
OriginalL'auteur Assad Ebrahim | 2014-02-10
Vous devez vous connecter pour publier un commentaire.
Assad, alors que je pense que la réponse réelle à cette question est dans les commentaires, permettez-moi de suggérer ce modèle comme une solution plus globale:
Dans ce cas, je suis à la suppression de toutes les matrices objet qui commence par un "a". En modifiant la
pattern
l'argumentation et de la fonction utilisée parsapply
ici, vous pouvez obtenir assez fine de contrôle sur ce que vous supprimer, sans avoir à préciser de nombreux noms.Si vous craignez que cela pourrait supprimer quelque chose que vous ne voulez pas supprimer, vous pouvez stocker le résultat de la
Filter(...
opération dans une variable, d'en étudier le contenu, et ensuite exécuter lerm(list=...)
commande.OriginalL'auteur BrodieG
Il est beaucoup plus simple et plus directe de la solution:
Ou, mieux encore, si vous êtes bon à propos de variable schémas de nommage, vous pouvez utiliser le filtrage suivant: stratégie
Le texte suivant génère la liste de variables qui correspondent à ce modèle
Oui, vous pouvez supprimer toutes les variables inutiles à l'aide de UN ligne de code, comme suit:
Espère que cette aide.
OriginalL'auteur HoneyBuddha
Essayer
eval(parse(...))
.Pourquoi pas?
Parce que c'est généralement le résultat dans le code qui est impossible à lire et à entretenir, et il y a toujours de meilleures alternatives.
OriginalL'auteur Rufo
J'ai eu une demande similaire. J'ai retiré tous les éléments que j'ai besoin d'une liste:
J'ai ensuite réaffecter les quelques valeurs que je souhaite garder avec de nouveaux noms de variables qui ne seront pas dans la variable varsToPurge. Après que je boucle à travers les éléments de
Faire un peu de nettoyage, et vous maintenir un environnement propre que vous allez par le biais de votre code.
Vous pouvez également utiliser un vecteur de numéros de ligne que vous souhaitez conserver en lieu et exécuté par le vecteur dans la boucle, mais il n'est pas aussi dynamique si vous ajoutez le travail approximatif que vous souhaitez supprimer.
OriginalL'auteur Wes Sauder