Hai câu hỏi R:
- Sự khác biệt giữa kiểu (được trả về bởi
typeof
) và lớp (được trả về bởiclass
) của một biến là gì? Sự khác biệt có giống với ngôn ngữ C ++ không? - Các kiểu và lớp biến có thể có là gì?
Hai câu hỏi R:
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?Câu trả lời:
Trong R mọi "đối tượng" đều có a mode
và 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ớ list
nhưng chúng được bao bọc thành data.frame
cá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ư print
vớ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 mode
như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
, typeof
và class
có liên quan đối với từng loại.
oldClass(matrix(1:10, 2,5)) # NULL
type
thự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, class
có 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.