128 votes

Quelle est la différence entre `=` et `<-` en R ?

J'utilise R 2.8.1 et il est possible d'utiliser les deux méthodes. = y <- comme opérateurs d'affectation de variables. Quelle est la différence entre eux ? Lequel dois-je utiliser ?

69voto

Mark Byers Points 318575

Desde aquí :

Les opérateurs <- et = affectent dans l'environnement dans lequel ils sont évalués. L'opérateur <- peut être utilisé partout, tandis que l'opérateur = n'est autorisé qu'au niveau supérieur (par exemple, dans l'expression complète tapée à l'invite de commande) ou comme l'une des sous-expressions d'une liste d'expressions entre crochets.

7 votes

Comme <- peut être utilisé n'importe où, cela signifie-t-il qu'il n'y a pas besoin d'utiliser = ?

31 votes

Non, vous devez toujours utiliser = lors de l'appel de fonctions pour éviter une affectation globale. Regardez ces exemples : mayin.org/ajayshah/KB/R/html/b1.html . Si vous avez utilisé name<-"paypal", x<-2, ... elle mettrait x au niveau supérieur. Essayez d'exécuter cet exemple mais en écrivant <- au lieu de = et voir ce qui se passe.

5 votes

La documentation est (encore à ce jour) erronée. = es no uniquement autorisé au niveau supérieur. À l'exception de la préséance des opérateurs, les <- y = Les opérateurs d'affectation sont totalement identiques par défaut. R complique les choses en donnant = a secondaire signification syntaxique, outre son utilisation en tant qu'opérateur d'affectation.

18voto

George Dontas Points 12116

Lecture de "Introducing Monte Carlo Methods with R", par Robert et Casella :

"L'opérateur d'affectation est = à ne pas confondre avec == qui est l'opérateur booléen d'égalité. Un opérateur d'affectation plus ancien est <- et, pour des raisons de compatibilité, il reste fonctionnel, mais il doit être ignoré pour assurer une programmation plus propre. (Comme le souligne Spector, P. (2009). Data Manipulation with R' - Section 8.7., l'exception est l'utilisation de system.time puisque = est ensuite utilisé pour identifier les mots-clés)

Une caractéristique trompeuse de l'opérateur d'assignation <- se trouve dans les booléens. telles que

> if (x[1]<-2) ...

qui est censé tester si oui ou non x[1] est inférieur à -2 mais qui finit par mais finit par allouer 2 à x[1], effaçant sa valeur actuelle ! Notez également que l'utilisation de

> if (x[1]=-2) ...

par erreur au lieu de (x[1]==-2) a la même conséquence."

0 votes

Je pense aussi que global assignment quel que soit le besoin de faire quelque chose comme ça, ne peut être réalisé qu'en utilisant la méthode ("gets" -based) <<- et qu'il n'existe pas d'équivalent basé sur les "égaux".

10 votes

Le guide de style R de Google dit le contraire : google-styleguide.googlecode.com/svn/trunk/

1 votes

if (x[1]=-2) est commodément interdit pour éviter ce genre d'erreur. Plus précisément, l'opérateur = n'est autorisé qu'au niveau supérieur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X