R不能使用继承声明setClass

时间:2013-08-28 13:59:46

标签: r inheritance initialization s4

removeClass("A")
setClass('A',representation=representation(a="numeric"))

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

.Object@a=a
.Object
})

好到这里

removeClass("B")

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

此代码在类“B”的定义上失败,没有任何机会为“B”添加初始化方法,而且我甚至没有创建任何对象

.local(.Object,...)出错:缺少参数“a”,没有默认值

如果我在initialize.A方法

中为a参数添加默认值,则不会失败

任何人都可以解释原因吗?

1 个答案:

答案 0 :(得分:1)

“为什么”是一个棘手的问题,答案是“因为”它是以这种方式实现的。如果您正在询问需要做些什么来避免这种情况,那么答案是:(a)为构造函数中的参数a提供默认值,或者(b)避免使用initialize方法。有一些讨论here。隐式契约是new("A")成功,