2016-07-07 23 views
12

Mã này giống như thế nàyTại sao x [NA] mang lại một vectơ NA có độ dài bằng x?

x <- 1:5 
x[NA] 

Tại sao nó tạo ra 5 NA?

+16

Câu hỏi hay. Cố gắng tự trả lời bằng cách xem những gì 'x [TRUE]', 'x [FALSE]', 'lớp (NA)' và 'x [NA_integer_]' trả về. – nicola

+10

'x [c (NA, TRUE)]' cũng có thể được khai sáng, trong đó nó cho thấy rõ ràng vector tái chế cả hai giá trị 'NA' và non-'NA'. – thelatemail

+6

Xem các bài đăng tương tự [tại đây] (http://stackoverflow.com/questions/23406124/na-in-subsetter-inconsistent-behavior) và [tại đây] (http://stackoverflow.com/questions/16418689/how-is -true-interpreted-when-used-as-matrix-index) –

Trả lời

13

Câu trả lời cho câu hỏi này có hai mặt:

như thế nào NA giải thích khi lập chỉ mục các ma trận?

Trong one of the links cung cấp bởi @alexis_laz, tôi tìm thấy một lời giải thích rất rõ cấu trúc như thế nào TRUE, FALSENA được giải thích khi lập chỉ mục các ma trận:

Logical chỉ số nói R mà các yếu tố bao gồm hoặc loại trừ.

Bạn có ba lựa chọn: TRUE, FALSENA

Họ phục vụ để cho biết hay không chỉ số đại diện ở vị trí đó nên được đưa vào. Nói cách khác:

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 

Ví dụ:

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

Một chi tiết quan trọng là chế độ lưu trữ mặc định cho một giá trị NA cô lập là hợp lý (thử typeof(NA)). Bạn có thể chọn chế độ lưu trữ của NA bằng cách sử dụng NA_integer_, NA_real_ (để tăng gấp đôi), NA_complex_ hoặc NA_character_.

Tại sao 5 NA và không chỉ 1?

Khi độ dài của chỉ số nhỏ hơn chiều dài của vector x, việc lập chỉ mục sẽ bắt đầu lại cũng để lập chỉ mục các giá trị trong x chưa được lập chỉ mục. Nói cách khác, R sẽ tự động "tái chế" các chỉ mục:

(...) Tuy nhiên, quy tắc tái chế tiêu chuẩn sẽ được áp dụng. Vì vậy, trong ví dụ trước, nếu chúng tôi thả người cuối cùng FALSE, vectơ chỉ số được tái chế, yếu tố đầu tiên của chỉ số là TRUE, và do đó các yếu tố thứ 6 của x hiện được đưa

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

Nhớ lại các chi tiết về chế độ lưu trữ từ phần trước. Nếu bạn nhập x[NA_integer_], thì bạn sẽ tìm thấy một kết quả khác.

+3

Thông tin mới này thêm vào câu trả lời trong liên kết thứ 2 do alexis_laz cung cấp? – Jaap

+4

Nó không thêm bất kỳ thông tin nào. Câu hỏi đang chờ một câu trả lời và tôi đặt cùng thông tin được cung cấp trong các bình luận –

Các vấn đề liên quan