2010-02-16 31 views

Respuesta

49

De here:

Los operadores < - y = asignar en el entorno en el que se evalúan. El operador < - se puede usar en cualquier lugar, mientras que el operador = solo se permite en el nivel superior (por ejemplo, en la expresión completa escrita en el símbolo del sistema) o como una de las subexpresiones en una lista de expresiones corregidas.

+5

Como' <-' puede ser utilizado en cualquier lugar, quiere decir esto que no existe. Necesito usar '='? –

+26

No, aún necesita usar '=' al llamar funciones para evitar asignarlas globalmente. Mire estos ejemplos: http://www.mayin.org/ajayshah/KB/R/html /b1.html. Si usó 'name <-" paypal ", x <-2, ...', establecería 'x' en el nivel superior. Intente ejecutar ese ejemplo pero escribiendo' <-' en lugar de '= 'y ver qué pasa. –

13

lectura de "Introducción a métodos de Monte Carlo con R", por Robert y Casella:

"El operador de asignación es =, que no debe confundirse con ==, que es el operador booleano por la igualdad Un mayor. El operador de asignación es <- y, por razones de compatibilidad, sigue siendo funcional, pero debe ignorarse para garantizar una programación más limpia (Según lo señalado por Spector, P. (2009). 'Manipulación de datos con R' - Sección 8.7., una excepción es cuando se usa system.time, ya que = se usa para identificar palabras clave)

Una característica engañosa del operador de asignación < - se encuentra en Boolean expresiones tales como

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

que se supone para probar si o no x [1] es menor que -2, pero termina hasta la asignación de 2 a x [1], borrando su valor actual! Tenga en cuenta también que el uso de

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

por error en lugar de (x [1] == - 2) tiene la misma consecuencia "

+0

También creo que' asignación global', cualquiera que sea la necesidad de hacer algo como esto, solo se puede realizar utilizando el operador ('' obtiene'') '' - '', y que hay no un equivalente basado en "iguales". –

+6

La guía de estilo R de Google dice lo contrario: http://google-styleguide.googlecode.com/svn/trunk/google-r-style.html#assignment –

+0

'if (x [1] = - 2)' está convenientemente prohibido para prevenir este tipo de error Específicamente, el operador '=' solo está permitido en el nivel superior. – Aaron

Cuestiones relacionadas