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?
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?
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
, FALSE
và NA
được giải thích khi lập chỉ mục các ma trận:
Logical
chỉ số nóiR
mà các yếu tố bao gồm hoặc loại trừ.Bạn có ba lựa chọn:
TRUE
,FALSE
vàNA
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ủax
hiện được đưax <- 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.
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
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â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
'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
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) –