Der Code ist wie dieserWarum liefert x [NA] einen NA-Vektor mit der gleichen Länge wie x?
x <- 1:5
x[NA]
Warum dauert es 5 NAs produzieren?
Der Code ist wie dieserWarum liefert x [NA] einen NA-Vektor mit der gleichen Länge wie x?
x <- 1:5
x[NA]
Warum dauert es 5 NAs produzieren?
Die Antwort auf diese Frage hat zwei Seiten:
Wie wird NA interpretiert, wenn Matrizen Indizierung?
In one of the links von @alexis_laz zur Verfügung gestellt, fand ich eine sehr gut strukturierte Erklärung, wie TRUE
, FALSE
und NA
interpretiert werden, wenn Matrizen Indizieren:
Logical
Indizes sagenR
welche Elemente einschließen oder ausschließen.Sie haben drei Möglichkeiten:
TRUE
,FALSE
undNA
Sie dienen, um anzuzeigen, ob der in dieser Position dargestellt Index aufgenommen werden soll. Mit anderen Worten:
TRUE == "Include the elment at this index" FALSE == "Do not include the element at this index" NA == "Return NA instead of this index" # loosely speaking
Zum Beispiel:
x <- 1:6 x[ c(TRUE, FALSE, TRUE, NA, TRUE, FALSE)] # [1] 1 3 NA 5
Ein wichtiges Detail ist, dass der Standard-Speichermodus für einen isolierten NA
Wert logisch ist (versuchen typeof(NA)
). Sie können den Speichermodus des NA
mit NA_integer_
, NA_real_
(für Doppel), NA_complex_
oder auswählen.
Warum 5 NA
und nicht nur 1?
Wenn die Länge des Indizes kleiner ist als die Länge des Vektors x
, wird die Indizierung über auch Index die Werte in x
beginnen, die noch nicht indiziert sind. Mit anderen Worten: R
wird die Indizes automatisch "recyceln":
(...) Es gelten jedoch die Standard-Recycling-Regeln. So im vorigen Beispiel, wenn wir das letzte
FALSE
, der Index Vektor fallen recycelt wird, ist das erste Element des Index istTRUE
und damit das sechste Elementx
jetztx <- 1:6 x[c(TRUE, FALSE, TRUE, NA, TRUE)] # [1] 1 3 NA 5 6
Recall das Detail enthalten ist über den Speichermodus aus dem vorherigen Abschnitt. Wenn Sie x[NA_integer_]
eingeben, werden Sie ein anderes Ergebnis finden.
Welche neuen Informationen liefert dies zur Antwort im 2. Link von alexis_laz? – Jaap
Es werden keine Informationen hinzugefügt. Die Frage wartete auf eine Antwort und ich stellte die Informationen in den Kommentaren zusammen –
Gute Frage. Versuchen Sie, sich selbst zu beantworten, indem Sie sehen, was 'x [TRUE]', 'x [FALSE]', 'class (NA)' und 'x [NA_integer_]' zurückgibt. – nicola
'x [c (NA, WAHR)]' könnte auch aufschlussreich sein, da es explizit den Vektor zeigt, der sowohl einen "NA" - als auch einen "Nicht-NA" -Wert recycelt. – thelatemail
Siehe ähnliche Beiträge [hier] (http://stackoverflow.com/questions/23406124/na-in-subsetter-inconsistent-behavior) und [hier] (http://stackoverflow.com/questions/16418689/how-is -true-interpretiert-wenn-verwendet-als-Matrix-Index) –