7
votes

Écrivez une fonction pour supprimer l'objet s'il existe

J'essaie d'écrire une fonction qui supprime un objet s'il existe. La raison en est que je veux me débarrasser de l'erreur de messagerie de journal: objet 'arg' introuvable. J'ai essayé ce qui suit: xxx

malheureusement, cela ne supprime pas l'objet s'il existe xxx

onces de ce que je fais mal ici? < / p>

meilleur albrecht


2 commentaires

Cela ressemble à une chose éventuellement dangereuse à faire. Voulez-vous nous donner un peu plus de détails sur les circonstances où vous obtenez cette erreur? Il peut y avoir d'autres moyens de traiter votre message d'erreur plus approprié.


Je suis d'accord avec Andrie. Les réponses fournies feront ce que vous avez demandé, mais probablement ce que vous devriez réellement faire est encore plus simple. Jetez un coup d'œil à essayer et trycatch. Qu'est-ce que vous essayez de faire cela évite de traiter des objets inexistants?


4 Réponses :


2
votes

C'est une sorte de laid, mais il semble fonctionner: xxx

Vous pouvez spécifier l'environnement différemment si vous n'élevez pas les noms de l'environnement de niveau supérieur.


0 commentaires

8
votes

Un idiome général pour saisir ce que l'utilisateur fourni sous forme d'argument à une fonction est déparss (substitut (FOO)) . Cette fonction est similaire à celle de @ian Ross mais employant cet idiome standard: xxx

où je suppose que vous ne voulez jamais supprimer les objets de l'environnement global, d'où la valeur par défaut, mais vous pouvez fournir Un environnement via env . Et ici, il est en action: xxx


2 commentaires

Il faut ajouter un avertissement selon lequel l'utilisation de DeParse (substitut ()) dans une fonction imbriquée est liée à donner problème. MYRM <- Fonction (x) IFRM (X) ne fera pas ce que vous pensez qu'il ...


@Joris +1 Bon point, mais on pourrait alors dire, ne fais pas ça! ;-)



4
votes

Gardez-le simple. Il suffit de transmettre le nom de l'objet dans votre fonction sous forme de chaîne de caractères, plutôt que d'essayer d'obtenir le nom de l'objet réel.

ifrm <- function(x, env = globalenv()) 
{
  if(exists(x, envir = env)) 
  {
    rm(list = x, envir = env)
  }
}


0 commentaires

4
votes

Essayez ceci xxx


0 commentaires