2014-12-18 14 views
12

Hãy xem xét ví dụ sau:R 'Inf` khi nó có lớp' Date` được in 'na`

structure(NA_real_, class = "Date") 
## [1] NA 
structure(Inf, class = "Date") 
## [1] NA 
is.na(structure(NA_real_, class = "Date")) 
## [1] TRUE 
is.na(structure(Inf, class = "Date")) 
## [1] FALSE 

Cả hai đều được in như NA. Đây có phải là hành vi mong đợi hoặc đây có phải là lỗi không? Thật khó chịu khi thấy NA đối với nội dung không trả lại TRUE cho is.na().

+1

Vì vậy, làm thế nào chính xác _should_ 'print.Date' hiển thị" kết thúc lần ". –

+0

IMO câu hỏi hay. Tôi hy vọng bạn không nhớ tôi đã thêm kết quả đầu ra quá –

+0

Đoán tốt nhất của tôi là vì 'unclass (cấu trúc (Inf, class =" Date "))' không phải là 'NA' Inf không thực sự' NA', nhưng nó là như xa như lớp Ngày đi ... hoặc một cái gì đó như thế –

Trả lời

7

Đây là hành vi mong đợi. được in không phải là đối tượng . Để in, đối tượng cần được chuyển đổi thành ký tự. as.character.Date gọi format.Date, gọi số format.POSIXlt. Các Value phần của ?format.POSIXlt (hoặc ?strptime) nói:

các format phương pháp và strftime vectơ nhân vật trở lại đại diện cho thời điểm đó. NA lần được trả lại là NA_character_.

Vì vậy, đó là lý do tại sao NA được in vì in structure(NA_real_, class = "Date") trả về NA_character_. Ví dụ:

R> is.na(format(structure(Inf, class = "Date"))) 
[1] TRUE 
R> is.na(format(structure(NaN, class = "Date"))) 
[1] TRUE 

Nếu bạn nào đó gặp phải những ngày này rung rinh trong mã của bạn, tôi khuyên bạn nên kiểm tra chúng bằng cách sử is.finite thay vì is.na.

R> is.finite(structure(Inf, class = "Date")) 
[1] FALSE 
R> is.finite(structure(NaN, class = "Date")) 
[1] FALSE 
Các vấn đề liên quan