R nhận dạng đối tượng


119

Tôi thường kết thúc với một hàm tạo đầu ra mà tôi không hiểu kiểu dữ liệu đầu ra. Tôi đang mong đợi một danh sách và nó kết thúc là một danh sách các danh sách hoặc một khung dữ liệu hoặc một cái gì đó khác. Phương pháp hoặc quy trình làm việc tốt để tìm ra kiểu dữ liệu đầu ra khi lần đầu tiên sử dụng một hàm là gì?

Câu trả lời:


126

Tôi thường bắt đầu với một số kết hợp của:

typeof(obj)
class(obj)
sapply(obj, class)
sapply(obj, attributes)
attributes(obj)
names(obj)

nếu thích hợp dựa trên những gì được tiết lộ. Ví dụ, hãy thử với:

obj <- data.frame(a=1:26, b=letters)
obj <- list(a=1:26, b=letters, c=list(d=1:26, e=letters))
data(cars)
obj <- lm(dist ~ speed, data=cars)

..Vân vân.

Nếu objlà một S3 hoặc S4 đối tượng, bạn cũng có thể thử methodshoặc showMethods, showClassvv Patrick Burns' R Inferno có một phần tốt đẹp về vấn đề này (giây # 7).

CHỈNH SỬA : Dirk và Hadley đề cập str(obj)trong câu trả lời của họ. Nó thực sự tốt hơn nhiều so với bất kỳ cách nào ở trên để xem nhanh và thậm chí chi tiết vào một đối tượng.


1
Tôi không nghĩ rằng mình đã vượt qua R Inferno. Cảm ơn vì đã gửi tôi trở lại đó.
JD Dài

3
Trong trường hợp bạn chưa xem, "Các đối tượng S4 trong 15 trang trở xuống" [ stat.auckland.ac.nz/S-Workshop/Gooterman/S4Objects.pdf ] là một cách đọc tốt khác (với nhiều chi tiết hơn).
ars

Tôi đã không thấy điều đó. Cảm ơn các liên kết. Đó là giá trị của nhập học. :)
JD Dài

Tôi đã tạo một hàm tiện ích nhỏ mã hóa gợi ý này. Xem tellMeAboutThis.r
eludom

65
str(x)

Đó là tất cả những gì bạn cần nhớ cho 99% trường hợp.


2
str(x, max.level=1)có thể hữu ích nếu x là một ggplot nhiều lớp!
PatrickT

7
str (UCTURE) khó nhớ, vì tôi cứ nghĩ là "string" nhưng ôi, rất hữu ích. Sẽ chỉ phải nói cấu trúc mười lần.
Dmitri

13

Nếu tôi nhận được 'someObject', hãy nói qua

someObject <- myMagicFunction(...)

sau đó tôi thường tiến hành bằng cách

class(someObject)
str(someObject)

có thể được theo sau bởi head (), tóm tắt (), print (), ... tùy thuộc vào lớp bạn có.


Chỉ cần thử str (obj). Nhiều hơn tôi mong đợi từ một biểu diễn chuỗi; rât gọn gang! Cảm ơn.
ars

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.