2010-02-16 18 views

risposta

49

Da here:

Gli operatori < - e = assegnare nell'ambiente in cui vengono valutati. L'operatore < può essere utilizzato ovunque, mentre l'operatore = è consentito solo al livello superiore (ad esempio, nell'espressione completa immessa al prompt dei comandi) o come una delle sottoespressioni in un elenco di espressioni rinforzate.

+5

Come' <-' può essere utilizzato ovunque, questo significa che non c'è. è necessario utilizzare '='? –

+26

No, è necessario utilizzare ancora '=' quando si chiamano le funzioni per evitare l'assegnazione a livello globale. Guarda questi esempi: http://www.mayin.org/ajayshah/KB/R/html /b1.html Se hai usato 'name <-" paypal ", x <-2, ...' avrebbe impostato 'x' al livello più alto Prova a eseguire quell'esempio ma scrivendo' <-' invece di '= 'e vediamo cosa succede –

13

La lettura da "Introduzione Metodo Monte Carlo con R", di Robert e Casella:

"L'operatore di assegnazione è =, da non confondere con ==, che è l'operatore booleano per l'uguaglianza Un vecchio. l'operatore di assegnazione è <- e, per ragioni di compatibilità, rimane ancora funzionale, ma dovrebbe essere ignorato per garantire una programmazione più pulita (Come sottolineato da Spector, P. (2009). "Manipolazione dei dati con R" - Sezione 8.7., si ha un'eccezione quando si utilizza system.time, poiché = viene quindi utilizzato per identificare le parole chiave)

Una caratteristica fuorviante dell'operatore di assegnazione < - si trova in booleana espressioni come

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

che si suppone per testare se x [1] è inferiore a -2, ma finisce fino assegnazione 2 a x [1], cancellando il suo valore attuale! Si noti inoltre che l'utilizzo di

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

erroneamente al posto di (x [1] == - 2) ha la stessa conseguenza "

+0

Penso anche che' global assignment', qualunque sia la necessità di fare qualcosa di simile, può essere eseguito solo usando l'operatore ("gets" -based) '<< -', e che c'è non un equivalente "equals". –

+6

La guida allo stile R di Google dice il contrario: http://google-styleguide.googlecode.com/svn/trunk/google-r-style.html#assignment –

+0

'if (x [1] = - 2)' è convenientemente vietato per prevenire questo tipo di errore. Nello specifico, l'operatore '=' è consentito solo al livello più alto. – Aaron

Problemi correlati