禁用默认 S4 class 构造函数

Disabling default S4 class constructors

强制始终使用参数创建 S4 对象的最佳方法是什么,这意味着永远不能调用默认构造函数?

我认为用户不想使用 new(),而是一个您可以为其指定参数/提示并提供文档的函数;理想情况下,用户不知道他们正在使用 'S4 classes',只是调用一些函数,returns 一个他们可以调用其他函数的对象。我的首选方法是

.A = setClass("A", representation=representation(x="numeric"))
A = function(x=numeric(), ...) {
    ## user-friendly coercion / checks / etc to 'x'
    .A(x=x, ...)
}
## accessors and other methods

仅导出包 NAMESPACE 中的 A()。由于 S4 classes 的隐含要求实际上 validObject(new("A")) 的计算结果为 TRUE(例如,),似乎很难避免允许用户构造 class这样。

创建一个带参数的显式 'initialize' 方法似乎会阻止接受不带参数的新 ('MyType') 调用。看来这就是我要找的解决方案。