2016-07-07 16 views
12

Kod jest takDlaczego x [NA] daje wektor NA o tej samej długości co x?

x <- 1:5 
x[NA] 

Dlaczego produkować 5 agencjom krajowym?

+16

Dobre pytanie. Spróbuj odpowiedzieć sobie, widząc, co zwracają 'x [TRUE]', 'x [FALSE]', 'class (NA)' i 'x [NA_integer_]'. – nicola

+10

'x [c (NA, TRUE)]' może być również oświeceniem, ponieważ wyraźnie pokazuje wektor przetwarzający zarówno wartość "NA", jak i nie -NA ". – thelatemail

+6

Zobacz podobne posty [tutaj] (http://stackoverflow.com/questions/23406124/na-in-subsetter-inconsistent-behavior) i [tutaj] (http://stackoverflow.com/questions/16418689/how-is -true -interpretowany-kiedy-używany-jako-macierz-indeks) –

Odpowiedz

13

Odpowiedź na to pytanie ma dwie strony:

Jak NA interpretowane podczas indeksowania matryc?

W one of the links dostarczonych przez @alexis_laz, znalazłem bardzo dobrze zorganizowany wyjaśnienie, w jaki TRUE, FALSE i NA są interpretowane podczas indeksowania matryc:

Logical indeksy powiedzieć R które elementy aby włączyć lub wyłączyć.

Masz trzy opcje: TRUE, FALSE i NA

Służą one do wskazania, czy indeks reprezentowane w tej pozycji powinny być uwzględnione. Innymi słowy:

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 

na przykład:

x <- 1:6 
x[ c(TRUE, FALSE, TRUE, NA, TRUE, FALSE)] 
# [1] 1 3 NA 5 

Ważnym szczegółem jest to domyślny tryb przechowywania izolowanym NA wartości logiczne (spróbuj typeof(NA)). Możesz wybrać tryb przechowywania urządzenia NA, korzystając z NA_integer_, NA_real_ (dla podwójnego), NA_complex_ lub NA_character_.

Dlaczego 5 NA i nie tylko 1?

Gdy długość indeksów jest mniejsza niż długość wektora x, indeksowanie rozpocznie się również wskaźnik wartości w x, które nie zostały jeszcze zindeksowane. Innymi słowy, R automatycznie "zawróci" wskaźniki:

(...) Jednak obowiązują standardowe zasady recyklingu. Więc w poprzednim przykładzie, jeśli spadnie ostatni FALSE wektor indeks jest recyklingowi, pierwszy element indeksu jest TRUE i stąd 6. elementem x jest teraz włączone

x <- 1:6 
x[c(TRUE, FALSE, TRUE, NA, TRUE)] 
# [1] 1 3 NA 5 6 

Przypomnijmy szczegóły o trybie przechowywania z poprzedniej sekcji. Jeśli wpiszesz x[NA_integer_], wtedy znajdziesz inny wynik.

+3

Jakie nowe informacje to dodaje do odpowiedzi w drugim linku dostarczonym przez alexis_laz? – Jaap

+4

Nie dodaje żadnych informacji. Pytanie czekało na odpowiedź i przygotowałem informacje zawarte w komentarzach –

Powiązane problemy