extend | R Documentation |
via a mechanism known as "parasitic inheritance".
Simply speaking this method "extends" the class of an object. What is actually
happening is that it creates an instance of class name ...className
,
by taking another object and add ...className
to the class
list and also add all the named values in ...
as attributes.
The method should be used by the constructor of a class and nowhere else.
## Default S3 method:
extend(this, ...className, ...)
this |
Object to be extended. |
...className |
The name of new class. |
... |
Attribute fields of the new class. |
Returns an object of class ...className
.
Henrik Bengtsson
setConstructorS3("MyDouble", function(value=0, ...) {
extend(as.double(value), "MyDouble", ...)
})
setMethodS3("as.character", "MyDouble", function(object, ...) {
fmtstr <- attr(object, "fmtstr")
if (is.null(fmtstr))
fmtstr <- "%.6f"
sprintf(fmtstr, object)
})
setMethodS3("print", "MyDouble", function(object, ...) {
print(as.character(object), ...)
})
x <- MyDouble(3.1415926)
print(x)
x <- MyDouble(3.1415926, fmtstr="%3.2f")
print(x)
attr(x, "fmtstr") <- "%e"
print(x)
setConstructorS3("MyList", function(value=0, ...) {
extend(list(value=value, ...), "MyList")
})
setMethodS3("as.character", "MyList", function(object, ...) {
fmtstr <- object$fmtstr
if (is.null(fmtstr))
fmtstr <- "%.6f"
sprintf(fmtstr, object$value)
})
setMethodS3("print", "MyList", function(object, ...) {
print(as.character(object), ...)
})
x <- MyList(3.1415926)
print(x)
x <- MyList(3.1415926, fmtstr="%3.2f")
print(x)
x$fmtstr <- "%e"
print(x)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.