我目前正在创建一个使用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类的默认对象。我也不知道如何解决这个问题。
答案 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>