你在混合S3和S4類的約定。 is
和extends
適用於S4類,但由於這些方法的實施方式,這些類可以與S3類一起使用。 inherits
是爲S3類編寫的,它不適用於具有完全兼容性的S4對象。
inherits
將class(x)
的結果與您在第二個參數中指定的類進行有效比較。因此,
> class(data.frame())
[1] "data.frame"
不包含"list"
任何地方因此失敗。
還要注意這從?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.
另一個混亂是與所述一個對象的類和該對象的執行。是的數據框是一個列表,如is.list()
告訴我們的,但是在R的S3類世界中,data.frame()
屬於"data.frame"
類而不是"list"
。
至於is(data.frame(),'list')
,以及它不是那個具體類"list"
因此FALSE
。什麼is(data.frame())
不被記錄在?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
因此is(data.frame())
是示出了"data.frame"
類擴展(在S4意義,而不是感S3)的類。這進一步說明了extends('data.frame','list')
的行爲與S4世界一樣,"data.frame"
類確實延伸了"list"
類。
有趣信息的另一個函數是'getClass('data.frame')' – eddi