1. Học hỏi
  2. /
  3. Khoa Học
  4. /
  5. Lập trình hướng đối tượng với S3 và R6 trong R

Connected

Bài tập

Tên gọi nói lên điều gì?

S3 dùng một quy ước đặt tên chặt chẽ: mọi phương thức S3 đều có tên dạng generic.class.

Chiều ngược lại thì không đúng: một hàm có thể có tên chứa dấu chấm mà không phải là phương thức S3. Điều này đúng với nhiều hàm đã tồn tại từ những ngày đầu của ngôn ngữ S. Ví dụ, all.equal() (tài liệu) thực chất là một generic S3, không phải phương thức. (Đây là ví dụ cho thấy cách viết leopard.case có thể gây nhầm lẫn.)

Bạn có thể kiểm tra một hàm có phải generic S3 hay không bằng cách gọi is_s3_generic() (tài liệu) từ gói pryr. Bạn cũng có thể in nó ra (gõ tên hàm trên console), rồi xem nó có gọi UseMethod() không.

Tương tự, bạn có thể kiểm tra một hàm có phải phương thức S3 hay không bằng cách gọi is_s3_method() (tài liệu) từ pryr. Ví dụ,

library(pryr)
is_s3_generic("t")           # hàm chuyển vị dạng generic
is_s3_method("t.data.frame") # phương thức chuyển vị cho data.frame
is_s3_method("t.test")       # một hàm cho kiểm định t của Student 

Những phát biểu nào sau đây là đúng?

  1. is.complex() (tài liệu) là một phương thức của generic is áp dụng cho đối tượng complex.
  2. seq.Date() (tài liệu) là một phương thức của generic seq áp dụng cho đối tượng Date.
  3. is.na.data.frame() (tài liệu) là một phương thức của generic is.na áp dụng cho đối tượng data.frame.
  4. sort() (tài liệu) là một hàm generic.
  5. order() (tài liệu) là một hàm generic.

Hướng dẫn

50 XP

Các phương án trả lời