Chế độ, Lớp và Loại đối tượng R


39

Tôi đã tự hỏi sự khác biệt giữa các đối tượng Chế độ, Lớp và Loại R là gì? Loại đối tượng R có thể được lấy bởi hàm typeof (), chế độ theo chế độ () và lớp theo lớp ().

Ngoài ra bất kỳ chức năng và khái niệm tương tự khác mà tôi bỏ lỡ?

Cảm ơn và trân trọng!


2
str (biến) là người bạn tốt nhất của bạn.
Brandon Bertelsen

2
Xem thêm R: Các loại và các lớp của câu hỏi biến trên Stack Overflow.
Leo

Câu trả lời:


21

Cái class()này được sử dụng để định nghĩa / xác định "loại" đối tượng là gì từ quan điểm lập trình hướng đối tượng trong R. Vì vậy, cho

> x <- 1:3
> class(x)
[1] "integer"

bất kỳ hàm chung nào có phương thức "số nguyên" sẽ được sử dụng.

typeof()đưa ra "loại" đối tượng theo quan điểm của R, trong khi mode()đưa ra "loại" đối tượng theo quan điểm của Becker, Chambers & Wilks (1988). Cái sau có thể tương thích hơn với các cài đặt S khác theo hướng dẫn sử dụng R Language Định nghĩa .

Có lẽ tôi đã sai ở khía cạnh sử dụng typeof()trong hầu hết các trường hợp trừ khi việc chuyển các đối tượng R sang mã được biên dịch, nơi storage.mode()sẽ hữu ích.

Điều này được thảo luận hữu ích trong Định nghĩa Ngôn ngữ R như được liên kết ở trên.


3
Tại sao có nhiều quan điểm như vậy? Tôi thấy không có lợi ích gì ngoài sự nhầm lẫn.
smwikipedia

1
@smwikipedia vì R có một di sản bao gồm S-Plus và S và ngôn ngữ sau này phát triển theo thời gian. Ngoài ra, cần phải phân biệt giữa các đối tượng người dùng có thể tạo và các loại đối tượng cơ sở.
Phục hồi Monica - G. Simpson

@smwikipedia vì đó là cách R. Vì lý do tương tự, chúng tôi có <-=cho phép gán biến.
Andre Terra

9

Từ: https://www.mail-archive.com/r-help@r-project.org/msg17169.html :

"Chế độ" là sự phân loại các đối tượng loại trừ lẫn nhau theo cấu trúc cơ bản của chúng. Các chế độ 'nguyên tử' là số, phức tạp, ký tự và logic. Các đối tượng đệ quy có các chế độ như 'danh sách' hoặc 'chức năng' hoặc một vài đối tượng khác. Một đối tượng có một và chỉ một chế độ.

'class' là một thuộc tính được gán cho một đối tượng xác định cách các hàm chung hoạt động với nó. Nó không phải là một phân loại loại trừ lẫn nhau. Nếu một đối tượng không có lớp cụ thể được gán cho nó, chẳng hạn như một vectơ số đơn giản, thì lớp đó thường giống với chế độ của nó, theo quy ước.

Thay đổi chế độ của một đối tượng thường được gọi là 'ép buộc'. Chế độ của một đối tượng có thể thay đổi mà không nhất thiết phải thay đổi lớp.


1

Sự khác biệt chính giữa lớp và typeof là cái đầu tiên có thể được xác định bởi người dùng, nhưng loại không thể. Ví dụ: xác định danh sách

> x<-list("a",c(1,2))

> # x is a list
> class(x)
[1] "list"
> # class can be user defined
> class(x)<-"newclass"
> class(x)
[1] "newclass"

> typeof(x)
[1] "list"
# you cannot assign a different type using typeof()
> typeof(x)<-"newclass"
Error in typeof(x) <- "newclass" : could not find function "typeof<-" 

Để cung cấp một tên lớp nhất định cho một đối tượng do người dùng định nghĩa là rất hữu ích để viết chương trình. Nó cho phép gắn thẻ các đối tượng do người dùng xác định theo cách tương tự với những gì xảy ra trong các ngôn ngữ lập trình hướng đối tượng.


Theo Rtài liệu cho typeofclass, khẳng định về "sự khác biệt chính" là không chính xác. classlà một thuộc tính của một đối tượng có thể được chỉ định bất kể chế độ lưu trữ bên trong của nó, trong khi "typeof xác định loại (R bên trong) hoặc chế độ lưu trữ của bất kỳ đối tượng nào." Một mô tả một đặc tính logic trong khi cái còn lại là một đặc tính vật lý của một đối tượng.
whuber
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.