Ich habe ein paar Leute gesehen, die [<-
als Funktion mit polnischer Schreibweise verwenden, zum Beispiel
was zurückgibt
%Vor% Ich habe versucht, mit [<-
ein wenig herumzuspielen, und es sieht so aus, als würde man das Ergebnis von etwas wie x[1,2] <- 7
ausgeben, ohne die Zuweisung tatsächlich auszuführen. Aber ich kann nicht sicher herausfinden, was diese Funktion tatsächlich macht, weil die Dokumentation für ?"["
nur beiläufig erwähnt, und ich kann Google oder SO nicht nach "[& lt; -".
Und ja, ich weiß, dass mit es wahrscheinlich eine schreckliche Idee ist, ich bin nur neugierig auf ein besseres Verständnis von R.
Dies ist, was Sie tun müssen, um die Aufgabe zu erhalten:
%Vor% Im Wesentlichen ist es so, dass [
einen Zeiger auf die Zeilenposition von x
und dann <-
erzeugt (was wirklich ein Synonym für assign
ist, das auch in einer Infix-Notation verwendet werden kann). macht die eigentliche "permanente" Aufgabe. Lassen Sie sich nicht irreführen, dass dies eine Call-by-Reference-Zuweisung ist. Ich bin mir ziemlich sicher, dass immer noch ein temporärer Wert von x
erstellt wird.
Ihre Version hat eine Unterzuordnung vorgenommen (wie man sieht, wenn sie zurückgegeben wird), aber diese Zuweisung erfolgte nur in der lokalen Umgebung des Aufrufs von [<-
, die die globale Umgebung nicht umfasste.
Da '['(x, y)
ein Objekt schneidet und '<-'(x, z)
eine Zuweisung durchführt, scheint '[<-'(x,y,z)
die Zuweisung x[y] <- y
auszuführen. @ 42-Antwort ist eine großartige Erklärung dessen, was [<-
tatsächlich tut, und die beste Antwort auf 'levels & lt; -' (Welche Zauberei ist das? gibt einen Einblick, warum R auf diese Weise funktioniert.
Um zu sehen, was [<-
tatsächlich unter der Haube tut, müssen Sie zum C-Quellcode gehen, den Sie für [<-
unter Ссылка (die relevanten Teile beginnen um die Linie 1470). Sie können sehen, dass x
, das Objekt, dem "zugewiesen" ist, geschützt ist, so dass nur die lokale Version mutiert ist. Stattdessen verwenden wir VectorAssign, MatrixAssign, ArrayAssign usw., um die Zuweisung lokal durchzuführen und dann das Ergebnis zurückzugeben.
Tags und Links r slice assignment-operator