Các kiểu và lớp của biến


84

Hai câu hỏi R:

  1. Sự khác biệt giữa kiểu (được trả về bởi typeof) và lớp (được trả về bởi class) của một biến là gì? Sự khác biệt có giống với ngôn ngữ C ++ không?
  2. Các kiểu và lớp biến có thể có là gì?

Bài liên quan này cũng có thể cung cấp thông tin hữu ích: stackoverflow.com/questions/8855589/...
Dominic Comtois

Câu trả lời:


96

Trong R mọi "đối tượng" đều có a modevà a class. Cái trước đại diện cho cách một đối tượng được lưu trữ trong bộ nhớ (số, ký tự, danh sách và hàm) trong khi cái sau đại diện cho kiểu trừu tượng của nó. Ví dụ:

d <- data.frame(V1=c(1,2))
class(d)
# [1] "data.frame"
mode(d)
# [1] "list"
typeof(d)
# list

Như bạn có thể thấy các khung dữ liệu được lưu trữ trong bộ nhớ listnhưng chúng được bao bọc thành data.framecác đối tượng. Cái sau cho phép sử dụng các hàm thành viên cũng như các hàm nạp chồng như printvới một hành vi tùy chỉnh.

typeof( storage.mode) thường sẽ cung cấp cùng một thông tin modenhưng không phải luôn luôn. Trường hợp tại điểm:

typeof(c(1,2))
# [1] "double"
mode(c(1,2))
# [1] "numeric"

Lý do đằng sau điều này có thể được tìm thấy ở đây :

Chức năng R cụ thể typeof trả về kiểu của một đối tượng R

Chế độ hàm cung cấp thông tin về chế độ của một đối tượng theo nghĩa của Becker, Chambers & Wilks (1988), và tương thích hơn với các cách triển khai khác của ngôn ngữ S

Các liên kết mà tôi được đăng trên cũng chứa một danh sách của tất cả các R mẹ đẻ basic types(vectơ, danh sách vv) và tất cả compound objects(các yếu tố và data.frames) cũng như một số ví dụ về cách mode, typeofclasscó liên quan đối với từng loại.


1
"Trong R mọi" đối tượng "đều có một chế độ và một lớp" miễn là chúng được nhìn từ quan điểm cấu trúc lớp S4 OOP. Trong S3, các đối tượng có thể không đã gán tên lớp:oldClass(matrix(1:10, 2,5)) # NULL
Erdogan CEVHER

6

typethực sự đề cập đến các cấu trúc dữ liệu khác nhau có sẵn trong R. Cuộc thảo luận này trong sổ tay Định nghĩa Ngôn ngữ R có thể giúp bạn bắt đầu về các đối tượng và kiểu.

Mặt khác, classcó nghĩa là một cái gì đó khác trong R hơn những gì bạn có thể mong đợi. Từ sổ tay Định nghĩa Ngôn ngữ R (đi kèm với phiên bản R của bạn):

2.2.4 Lớp học

R có một hệ thống lớp phức tạp 1 , được điều khiển chủ yếu thông qua thuộc tính lớp. Thuộc tính này là một vectơ ký tự chứa danh sách các lớp mà một đối tượng kế thừa. Điều này tạo cơ sở cho chức năng "phương pháp chung" trong R.

Thuộc tính này có thể được truy cập và thao tác hầu như không giới hạn bởi người dùng. Không có kiểm tra rằng một đối tượng thực sự chứa các thành phần mà các phương thức lớp mong đợi. Do đó, việc thay đổi thuộc tính lớp nên được thực hiện một cách thận trọng và khi chúng có sẵn các hàm tạo và ép buộc cụ thể nên được ưu tiên.

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.