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:
Kurz gesagt, l[]
gibt die gesamte Liste zurück.
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.
Ü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,
<-
gibt die ausgewertete rechte Seite vor zurück, die die Recyclingregeln anwendet. l
oder v
im Wesentlichen identisch mit l[]
oder v[]
.