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)
Run the code above in your browser using DataLab