2013-07-22 70 views

回答

8

你在混合S3和S4類的約定。 isextends適用於S4類,但由於這些方法的實施方式,這些類可以與S3類一起使用。 inherits是爲S3類編寫的,它不適用於具有完全兼容性的S4對象。

inheritsclass(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"類。

相關問題