2013-08-28 67 views
2
removeClass("A") 
setClass('A',representation=representation(a="numeric")) 

setMethod('initialize','A', function(.Object,...,a){ 

[email protected]=a 
.Object 
}) 

聲明setClass OK了這裏R可以不繼承

removeClass("B") 

setClass('B',representation=representation(b="numeric"),contains="A") 

此代碼對「B」類的定義失敗,沒有我有任何的機率增加一個initialize方法爲「B」,和沒有我,即使在創建。本地的任何對象

錯誤(.Object,...):參數「一」缺失,沒有默認設置

如果我添加它並不失敗方法

任何人都可以解釋爲什麼嗎?

+0

是不是「如果我爲initialize.A方法中的a參數添加默認值,它不會失敗」解決方案?也許你想看看:http://stackoverflow.com/questions/18197214/how-to-define-an-s4-prototype-for-inherited-slots – sgibb

+0

奇怪的是隻是添加行setClass ..沒有創建對象就會觸發錯誤。假設我重複使用了代碼,我不會修改它 – user2725682

回答

1

「爲什麼」是一個棘手的問題,答案是「因爲」它是以這種方式實現的。如果你在問什麼需要做以避免這種情況,答案是(a)在構造函數中爲參數a提供默認值,或者(b)避免使用初始化方法。有一些討論here。隱式合同是new("A")成功,

+0

感謝您的答案。閱讀討論後,看起來最好避免使用繼承來初始化方法 – user2725682