Indexieren einer Liste mit einem leeren Index

8

Die Technik des Indizierens eines Datenrahmens mit einem leeren Index ist in Hadley Wickams Advanced R mehrmals enthalten, ist es aber nur dort nebenbei erklärt. Ich versuche, die Regeln für die Indizierung einer Liste mit einem leeren Index herauszufinden. Betrachten Sie die folgenden vier Aussagen.

%Vor%

Fragen:

  1. Warum unterscheidet sich die Ausgabe der zweiten Anweisung von der Ausgabe der dritten Anweisung? Soll die Zuweisung nicht das zugewiesene Objekt zurückgeben, in welchem ​​Fall die zweite Anweisung dieselbe Ausgabe wie die dritte ausgeben soll?
  2. Wie kommt es, dass die Zuweisung in der zweiten Anweisung zu der Ausgabe führt, die nach der dritten Anweisung angezeigt wird? Welche Regeln gelten für die Zuordnung zu einer leer indexierten Liste?
  3. Wie kommt es, dass die vierte Aussage die gezeigte Ausgabe liefert? Welche Regeln gelten für die Indexierung einer Liste mit einem leeren Index, wenn sie sich nicht auf der linken Seite einer Zuweisung befindet?
Evan Aad 30.12.2013, 08:46
quelle

2 Antworten

2

Kurz gesagt, l[] gibt die gesamte Liste zurück.

%Vor%

l[] <- list(c=3) weist im Wesentlichen neu zu, was jedem Index zugewiesen wurde, um nun das Ergebnis von list(c=3) zu sein. In diesem Beispiel ist es das gleiche wie mit l[[1]] <- 3 und l[[2]] <- 3 . Auf der Seite ?'[' , die die leere Indizierung ein paar Mal erwähnt:

  

Wenn ein Indexausdruck auf der linken Seite einer Zuweisung erscheint (bekannt als Unterzuordnung), wird dieser Teil von x auf den Wert der rechten Seite der Zuweisung gesetzt.

und auch

  

Ein leerer Index wählt alle Werte aus: Dies wird meistens verwendet, um alle Einträge zu ersetzen, aber behalten Sie die Attribute bei.

Also nehme ich grob an, dass jeder Index von l zu list(c=3) auswerten sollte.

Wenn Sie (l[] <- list(c = 3)) eingeben, wird der Ersatzwert zurückgegeben. Wenn Sie dann l oder l[] eingeben, sehen Sie, dass die Werte für jeden Index durch list(c=3) ersetzt wurden.

    
Jota 30.12.2013, 09:44
quelle
2

Überprüfen Sie dies zusätzlich zur vorherigen Antwort. Beachten Sie, dass das Verhalten mit gewöhnlichen Vektoren und Listen völlig identisch ist, daher kann es nicht als "list-spezifisch" bezeichnet werden.

%Vor%

Die Zuweisung über die Teilmenge behält Anfangsattribute (hier Namen). So sind Namen von der rechten Seite der Zuordnung verloren. Wichtig ist auch, dass die Zuordnung über eine Teilmenge den Recyclingregeln folgt. In Ihrem Beispiel werden alle Werte auf 3 neu zugewiesen, in meinem Beispiel gibt es eine teilweise Wiederverwendung mit einer Warnung aufgrund von Längeninkompatibilität.

Um es zusammenzufassen,

  1. Die Zuweisung mit <- gibt die ausgewertete rechte Seite vor zurück, die die Recyclingregeln anwendet.
  2. Dies geschieht aufgrund von recycling , da sich die Längen zweier Objekte unterscheiden.
  3. Ohne Zuweisungsoperator ist l oder v im Wesentlichen identisch mit l[] oder v[] .
tonytonov 30.12.2013 10:06
quelle

Tags und Links