R具有S3属性的S4对象的实例

时间:2016-09-28 09:41:15

标签: r oop zoo s4

我目前正在创建一个使用S3 zoo对象的新S4类。我可以创建一个类

setOldClass("zoo")
setClass("rollingSD", slot = c(rollPeriod = "numeric", tsOutput = "zoo"))

此代码工作正常。现在,如果我想创建一个对象

 riskSD <- new("rollingSD")

这也很好。但是,以下内容会生成错误

riskSD <- new("rollingSD", rollPeriod = 12)
Error in validObject(.Object) :
invalid class “rollingSD” object: invalid object for slot "tsOutput" in class  
"rollingSD": got class "S4", should be or extend class "zoo"

我不清楚为什么没有启动zoo类的默认对象。我也不知道如何解决这个问题。

1 个答案:

答案 0 :(得分:1)

问题是由于R的类机制不知道如何创建新的some_zoo_object对象而引起的。您可以通过指定“原型”来解决此问题:

zoo

其中numeric属于numeric()类。 zoo广告位的默认原型是new("zoo"),但由于您自己定义了(S4)类PFont mono; float x; float y; float speed; int m=millis(); void setup() { size(720, 480); background(0); mono = createFont("Helvetica", 100); textFont(mono); text("Ê", 90, 270); text("X", 190, 270); text("T", 295, 270); text("A", 385, 270); text("S", 480, 270); text("E", 580, 270); } void draw() { speed+=1.5; if (260-speed<250) { speed*=-1; } if (mouseX>85 && 95<mouseX && mouseY>220 && 320>mouseY) { background(0); fill(random(255), random(255), random(255)); text("Ê", 90+random(-10, 10), 270-speed); fill(255); text("X", 190, 270); text("T", 295, 270); text("A", 385, 270); text("S", 480, 270); text("E", 580, 270); } if (mouseX>185 && 195<mouseX && mouseY>220 && 320>mouseY) { background(0); fill(random(255), random(255), random(255)); text("X", 190+random(-10, 10), 270-speed); fill(255); text("Ê", 90, 270); text("T", 295, 270); text("A", 385, 270); text("S", 480, 270); text("E", 580, 270); } if (mouseX>290 && 300<mouseX && mouseY>220 && 320>mouseY) { background(0); fill(random(255), random(255), random(255)); text("T", 295+random(-10, 10), 270-speed); fill(255); text("Ê", 90, 270); text("X", 190, 270); text("A", 385, 270); text("S", 480, 270); text("E", 580, 270); } if (mouseX>380 && 390<mouseX && mouseY>220 && 320>mouseY) { background(0); fill(random(255), random(255), random(255)); text("A", 385+random(-10, 10), 270-speed); fill(255); text("S", 480, 270); text("E", 580, 270); text("Ê", 90, 270); text("X", 190, 270); text("T", 295, 270); } if (mouseX>475 && 480<mouseX && mouseY>220 && 320>mouseY) { background(0); fill(random(255), random(255), random(255)); text("S", 480+random(-10, 10), 270-speed); fill(255); text("E", 580, 270); text("Ê", 90, 270); text("X", 190, 270); text("T", 295, 270); text("A", 385, 270); } if (mouseX>575 && 585<mouseX && mouseY>220 && 320>mouseY) { background(0); fill(random(255), random(255), random(255)); text("E", 580+random(-10, 10), 270-speed); fill(255); text("Ê", 90, 270); text("X", 190, 270); text("T", 295, 270); text("A", 385, 270); text("S", 480, 270); } } ,因此默认值为run()且未定义。< / p>