Bạn đang trộn các quy ước lớp S3 và S4. is
và extends
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"
.
Nguồn
2013-07-22 22:29:55
một hàm khác có thông tin thú vị là 'getClass ('data.frame')' – eddi