2016-07-07 19 views
12

kodNeden x [NA] bir NA vektörünü x ile aynı uzunlukta verir?

x <- 1:5 
x[NA] 

Neden UA'lar 5 üretir gibi midir?

+16

İyi soru. X [TRUE] ',' x [FALSE] ',' class (NA) 've' x [NA_integer_] 'dönüşlerini görerek kendinize cevap vermeye çalışın. – nicola

+10

'x [c (NA, TRUE)], aynı zamanda, hem bir“ NA ”hem de“ NA ”olmayan bir değeri geri dönüştüren vektörü açıkça gösterdiğinden, aydınlatıcı da olabilir. – thelatemail

+6

Benzer iletilere bakın [burada] (http://stackoverflow.com/questions/23406124/na-in-subsetter-inconsistent-behavior) ve [here] (http://stackoverflow.com/questions/16418689/how-is -true-yorumlanmış-ne zaman-matris-endeks) –

cevap

13

Bu sorunun cevabı iki tarafı vardır: matrisleri dizine eklerken

Nasıl NA yorumlanır?

Logical endeksleri dahil edilip edilmeyeceği R hangi unsurları anlatmak: @alexis_laz tarafından sağlanan one of the links yılında

, ben matrisler dizine eklerken TRUE, FALSE ve NA nasıl yorumlandığı çok iyi yapılandırılmış bir açıklama buldum. TRUE, FALSE ve onlar bu pozisyonda temsil endeks dahil edilmelidir olup olmadığını belirtmek için hizmet NA

:

Üç seçeneğiniz vardır. Örneğin

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 

: Diğer bir deyişle:

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

önemli bir detay (typeof(NA) deneyin) izole edilmiş bir NA değeri için varsayılan depolama modu mantıksal olmasıdır. NA'un NA_integer_, NA_real_ (çift için), NA_complex_ veya NA_character_ kullanarak depolama modunu seçebilirsiniz.

Neden 5 NA ve sadece 1 değil?

endekslerin uzunluğu vektörü x uzunluğundan daha küçük olan, indeksleme indeksi henüz endeksli değil x değerleri de baştan başlar. Diğer bir deyişle, R otomatik olarak endeksleri "geri dönüştürecektir":

(...) Bununla birlikte, standart geri dönüşüm kuralları geçerlidir. Yani önceki örnekte, son FALSE düşüş olursa endeks vektör geri dönüşümlü olması, dizinin ilk elemanı TRUE olduğunu ve dolayısıyla x 6. eleman şimdi

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

Hatırlama detay dahildir Bir önceki bölümden saklama modu hakkında. x[NA_integer_] yazarsanız, farklı bir sonuç bulacaksınız.

+3

Bu yeni bilgi alexis_laz tarafından sağlanan 2. bağlantıdaki cevaba ekleniyor mu? – Jaap

+4

Hiçbir bilgi eklemez. Soru bir cevap bekliyordu ve yorumlarda verilen bilgileri bir araya getirdim –