2015-02-17 15 views
17

hãy tha thứ cho tôi nếu câu hỏi của tôi khá cơ bản. Tôi đã tạo một khung dữ liệu trống theo df <- data.frame() và rõ ràng là khung dữ liệu là NULL (trống). khi tôi cố gắng kiểm tra xem khung dữ liệu có trống không bởi is.null(df), kết quả là FALSE. Có sự khác biệt nào giữa NULLempty trong R. Trong trường hợp này nếu khung dữ liệu không phải là NULL thì nội dung trong khung dữ liệu trống là gì và khi nào sẽ là NULL. Cảm ơnTại sao một khung dữ liệu trống thất bại trong một bài kiểm tra is.null()?

+1

'df' tồn tại, vì vậy nó không phải là rỗng. 'is.empty (df)' là TRUE, mặc dù. – cphlewis

+0

@cphlewis Từ đâu đến 'is.empty'? –

+1

Rất tiếc, xin lỗi, tôi đoán là từ 'spatstat'! – cphlewis

Trả lời

30

df không phải là NULL vì nó là khung dữ liệu và do đó có một số thuộc tính được xác định. Ví dụ, nó có một lớp. Và bạn có thể lấy số hàng trong khung dữ liệu bằng cách sử dụng nrow(df), ngay cả khi kết quả sẽ xảy ra bằng không. Do đó, số hàng cũng được xác định rõ.

Như fas như tôi biết, không có lệnh is.empty trong R. căn cứ gì bạn có thể làm được, ví dụ, sau đây

is.data.frame(df) && nrow(df)==0 

này sẽ cung cấp TRUE cho một khung dữ liệu rỗng (có nghĩa là, một không có hàng) và sai khác.

Lý do kiểm tra is.data.frame trước tiên là nrow có thể gây ra lỗi, nếu nó được áp dụng cho bất kỳ điều gì khác ngoài khung dữ liệu. Nhờ &&, nrow(df) sẽ chỉ được đánh giá nếu df là một khung dữ liệu.

+0

Bạn có thể kiểm tra xem 'tên (df)' có trống không ('ký tự (0)'). – cphlewis

+0

kiểm tra các hàng df bằng 'nrow (df) == 0' rõ ràng là' 0' và không cần phải viết 'is.data.frame (df)' –

+3

Tùy thuộc vào cách bạn xác định rỗng, bạn không thể chỉ kiểm tra 'tên (df)'. Khung dữ liệu sau 'df <-data.frame (a = số(), b = số())' không có nội dung, nhưng tên vẫn được xác định. Vì vậy, định nghĩa của tôi sẽ nói rằng nó có sản phẩm nào, bạn sẽ nói nó không phải. Tất cả một vấn đề của những gì bạn acutally muốn kiểm tra, tất nhiên. – Stibu

0

data.frame() tạo đối tượng có khung dữ liệu . Vì đối tượng tồn tại, is.null sẽ trả lại FALSE. Biến số NULL không có lớp và không có nội dung.

+1

'is.null' sẽ trả về 'FALSE' vì đối tượng không phải là NULL; vì đối tượng * tồn tại *, 'is.null' sẽ không trả về" Lỗi: không tìm thấy đối tượng. " – cphlewis

-3

Câu trả lời ở trên là chính xác, is.na và is.null không thể phát hiện giá trị rỗng trong R. Đây là những gì tôi sẽ làm để tính số lượng giá trị trống trong khung dữ liệu của bạn 'df' trong trường hợp này .

is.na (df [df == '']) < - TRUE # chỉ thay NA cho giá trị trống trong df.

tổng (is.na (df)) # sẽ cung cấp cho bạn ý tưởng số lượng giá trị trống có trong 'df' của bạn.

Hy vọng điều này hữu ích.

+1

Tôi không nghĩ đó thực sự là những gì OP hỏi. Tôi không muốn ngăn cản bạn trả lời các câu hỏi trên SO, nhưng câu trả lời này (trong khi câu trả lời * câu hỏi của ai đó) quá xa câu hỏi có ích ... –

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