2015-09-28 7 views
13

von R Quellcode Graben in (Datei R-3.2.2/src/main/gram.y Linien 2836-2852) fand ich, dass die R-Parser/tokenizer der Auffassung, dass := ist ein LEFT_ASSIGNMENT Token.Was ist der R-Zuweisungsoperator: = für?

Aber wenn man versucht, es als Zuweisungsoperator zu verwenden, in R.3.2.2,
ich habe einen Fehler (unmöglich Funktion für := zu finden ...), aber wie Sie sehen können R betrachtet es als eine Zuordnung wie <-:

> myVar := 42 
Erreur : impossible de trouver la fonction ":=" 
> := 
Erreur : unexpected assignment in ":=" 
> <- 
Erreur : unexpected assignment in "<-" 

Ist es ein Fehler, oder funktioniert das Token := müssen aus dem Tokenizer-Quellcode entfernt werden?

Gibt es eine Geschichte in der Vergangenheit über := Betreiber in R?

+2

': =' ist ein sehr handlicher Betreiber innerhalb von 'data.table' , aber nicht (noch?) in R, soweit ich weiß. – daroczig

+2

Unrelated - warum wird die Hälfte des R-Fehlers in Englisch ausgegeben? Ich nehme an, dass Sie das Gebietsschema auf Französisch eingestellt haben. –

+0

Related: http://StackOverflow.com/Questions/7033106 http://StackOverflow.com/Questions/26269423 – Frank

Antwort

5

Zur Verdeutlichung sind die R Zuweisungsoperatoren <- und =.

?`<-` 

Statt <- in der Befehlszeile:

Um Informationen über diese Art zu erhalten. Es gibt auch einen Operator <<-, der sich auf die Variable in der übergeordneten Umgebung auswirkt.

In Bezug auf := ist dieser Operator der Operator j in data.table-Paket. Es kann defined as gelesen werden und ist nur in einem data.table Objekt verwendbar. Um dies zu verdeutlichen wir die zweite Säule zu b (definieren col2 mit Wert b), wenn Werte in der ersten Spalte sind gleich 1 ändern:

library(data.table) 

dt = data.table(col1=c(1,2,1,2,3), col2 = letters[1:5]) 

dt[col1==1,col2:='b'] 

Für eine detaillierte Erläuterung:

?`:=` 

Hoffe, es verdeutlicht.

+0

Ich denke, diese Zeilen im Parser-Code sind, warum ': =' könnte definiert werden. Ich erinnere mich, dass ich so etwas gelesen habe, aber vergessen habe wo. Vielleicht könnten Matt oder Arun klären. – Roland

+0

Effektiv definieren die data.table-Pakete eine benutzerdefinierte ': =' - Funktion, die Vorteile des Zuweisungsoperators ': =' nutzt, der im R-Parser/Tokenizer definiert ist, aber nirgends in R Language ... Next inoffiziell beschrieben/geschrieben wird Frage: Ist es wirklich sicher und zukunftssicher für alle (und für data.table maintainer ...), dieses ': =' token zu benutzen ??? Fragen die data.table-Entwickler das R-Kernteam auf, dieses ": =" -Zuweisungs-Token hinzuzufügen? –

+0

@RomainJacotin Es ist äußerst unwahrscheinlich, dass R-core den Parser so verändert, dass das weit verbreitete Paket data.table durchbrochen wird. Sie sind sehr auf die Rückwärtskompatibilität achten. – Roland

11

Es war ein zuvor Zuweisungsoperator erlaubt, im Jahr 2001 this article von John Chambers sieht

Die Entwicklungsversion von R ermöglicht nun einige Zuordnungen C- oder Java-Stil geschrieben werden, die = Operator . Dies erhöht die Kompatibilität mit S-Plus (sowie mit C, Java und vielen anderen Sprachen).

Alle zuvor erlaubt Zuweisungsoperatoren (< -,: =, _ und < < -) bleiben voll wirksam.

Es scheint, die := Funktion nicht mehr vorhanden ist, aber Sie können „wieder aktivieren“ wie folgt aus:

`:=` <- `<-` 
x:=3 
x 
[1] 3 
+0

Danke James, das ist jetzt klar. –

+0

James, FYI es scheint, '_' wird derzeit nicht als eine Zuordnung durch den R-3.2.2 Parser/Tokenizer (geben Sie es nur in der Eingabeaufforderung und Sie haben eine 'unerwartete Eingabe' und nicht eine 'unerwartete Zuordnung' wie Sie haben, indem Sie allein '<-' oder ': =' oder '<< -' eingeben –

+0

@RomainJacotin Ja, der Unterstrich wurde als Zuweisungsoperator in der Version 1.8.0 entfernt, ich finde keine Erwähnung in der News Files in Bezug auf ': =' though. http://svn.r-project.org/R/trunk/doc/NEWS.1 – James

Verwandte Themen