2012-12-12 6 views
6

आर संस्करण:उपयोग S3 आभासी कक्षा, त्रुटि मिली: मिला वर्ग "एस 4", हो सकता है या विस्तार वर्ग "nls.lm" चाहिए

R version 2.15.2 (2012-10-26) 
    Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit) 

मैं एक एस 4 वर्ग बनाना चाहते

setOldClass("nls.lm") 

setClass (
    Class="TestClass", 
    representation=representation(
     lmOutput = "nls.lm", 
     anumeric = "numeric" 
    ) 
) 

अब, अगर मैं मैं की तरह कुछ कर सकते हैं एक "निर्माता समारोह" में इस वर्ग के कॉल करना चाहते हैं: एक स्लॉट के रूप में: कि nls.lm के समारोह (minpack.lm पैकेज) के उत्पादन में ऑब्जेक्ट का उपयोग यह (सही?):

myConstructor <- function() 
{ 
    return(new("TestClass")) 
} 

pippo <- myConstructor() 

pippo 
An object of class "TestClass" 
Slot "lmOutput": 
<S4 Type Object> 
attr(,".S3Class") 
[1] "nls.lm" 

Slot "anumeric": 
numeric(0) 

और ऑब्जेक्ट "पिप्पो" सही ढंग से प्रारंभ होता है।

अगर मैं इस कोड का उपयोग करने के बजाय मैं एक त्रुटि मिली:

myConstructor2 <- function() 
{ 
    pippo <- new("TestClass", anumeric=1000) 
    return(pippo) 
} 

pippo <- myConstructor2() 
Error in validObject(.Object) : 
invalid class “TestClass” object: invalid object for slot "lmOutput" in class "TestClass": got class "S4", should be or extend class "nls.lm" 

लगता है कि अगर मैं नया कुछ स्लॉट में init करना चाहते हैं, यह एक S3 कक्षा स्लॉट के साथ समस्या पैदा करते?

इस समस्या से बचने के तरीके पर कोई संकेत?

धन्यवाद

उत्तर

3

वास्तव में, कोई तर्क निर्माता गलत वस्तु देता है, भी, यह सिर्फ

> validObject(new("TestClass")) 
Error in validObject(new("TestClass")) : 
    invalid class "TestClass" object: invalid object for slot "lmOutput" 
    in class "TestClass": got class "S4", should be or extend class "nls.lm" 

समाधान का परीक्षण नहीं किया है,

setClass (
    Class="TestClass", 
    representation=representation(
     lmOutput = "nls.lm", 
     anumeric = "numeric" 
    ), 
    prototype=prototype(
     lmOutput=structure(list(), class="nls.lm") 
    ) 
) 
+0

एक उपयुक्त प्रोटोटाइप प्रदान करना है हो सकता है त्वरित उत्तर के लिए धन्यवाद। बस मेरे "वास्तविक" कोड में लागू किया गया। ऑब्जेक्ट अब मान्य है! – tucano

संबंधित मुद्दे