2013-07-22 28 views

Trả lời

8

Bạn đang trộn các quy ước lớp S3 và S4. isextends là dành cho các lớp S4 nhưng chúng hoạt động với các lớp S3 do cách chúng được triển khai. inherits được viết cho các lớp S3 và nó không có ý định làm việc với các đối tượng S4 với khả năng tương thích đầy đủ.

inherits so sánh hiệu quả kết quả của class(x) với lớp bạn chỉ định trong đối số thứ hai. Do đó

> class(data.frame()) 
[1] "data.frame" 

không chứa "list" ở bất kỳ nơi nào không thành công.

Cũng lưu ý này từ ?inherits:

The analogue of ‘inherits’ for formal classes is ‘is’. The two 
functions behave consistently with one exception: S4 classes can 
have conditional inheritance, with an explicit test. In this 
case, ‘is’ will test the condition, but ‘inherits’ ignores all 
conditional superclasses. 

nhầm lẫn khác là với lớp của một đối tượng và thực hiện các đối tượng đó. Có một khung dữ liệu là một danh sách là is.list() cho chúng ta biết, nhưng trong thế giới lớp S3 của R, data.frame() là của lớp "data.frame" không phải là "list".

Đối với is(data.frame(),'list'), cũng không phải lớp học cụ thể đó là "list" do đó là FALSE. Có gì is(data.frame()) không được ghi chép lại trong ?is

Summary of Functions: 

    ‘is’: With two arguments, tests whether ‘object’ can be treated as 
      from ‘class2’. 

      With one argument, returns all the super-classes of this 
      object's class 

Do đó is(data.frame()) đang hiển thị các lớp mà lớp "data.frame" kéo dài (theo nghĩa S4, không phải là cảm giác S3). Điều này giải thích thêm về hành vi của extends('data.frame','list') như trong thế giới S4, lớp "data.frame"không mở rộng lớp "list".

Các vấn đề liên quan