【发布时间】:2016-08-02 03:30:31
【问题描述】:
问题来自于对包进行试验,使用new(Class = 'ddmatrix', Data = X) 和ddmatrix(Data = X) 查找会产生不同的结果,其中X 是一个矩阵(可以认为类ddmatrix 是一个转换后的类matrix)。
文档
在包中,定义了一个S4类ddmatrix。 setGeneric(name = 'ddmatrix') 的通用构造函数。此外,pacakge 定义setMethod('ddmatrix', signature = 'matrix', ...) 如下:
setMethod("ddmatrix", signature(data="matrix"),
function(data, nrow=1, ncol=1, byrow=FALSE, ...
bldim=.pbd_env$BLDIM, ICTXT=.pbd_env$ICTXT)
{
dim(data) <- NULL
ret <- ddmatrix(data=data, nrow=nrow, ncol=ncol, byrow=byrow, bldim=bldim, ICTXT=ICTXT)
return( ret )
}
)
我很困惑在上述setMethod('ddmatrix', signature = 'matrix') 步骤中如何使用方法ddmatrix。这个ddmatrix 方法是通用ddmatrix 的默认方法吗?
同时,当调用new('ddmatrix', Data = X) 时,它将调用哪个方法从matrix 对象构建一个新的ddmatrix 对象? new函数是:
function (Class, ...)
{
ClassDef <- getClass(Class, where = topenv(parent.frame()))
value <- .Call(C_new_object, ClassDef)
initialize(value, ...)
}
问题
要回答new('ddmatrix') 和ddmatrix() 之间的差异,我认为一种方法是找到默认构造函数。同时,包中还定义了setMethod('ddmatrix', signature = 'vector',...),这是默认的吗?
【问题讨论】: