Title: | Very Large Numbers in R |
---|---|
Description: | Very large numbers in R. Real numbers are held using their natural logarithms, plus a logical flag indicating sign. Functionality for complex numbers is also provided. The package includes a vignette that gives a step-by-step introduction to using S4 methods. |
Authors: | Robin K. S. Hankin [aut, cre] |
Maintainer: | Robin K. S. Hankin <[email protected]> |
License: | GPL |
Version: | 1.2-9-1 |
Built: | 2024-12-12 06:13:56 UTC |
Source: | https://github.com/robinhankin/brobdingnag |
Very large numbers in R. Real numbers are held using their natural logarithms, plus a logical flag indicating sign. Functionality for complex numbers is also provided. The package includes a vignette that gives a step-by-step introduction to using S4 methods.
The DESCRIPTION file:
Package: | Brobdingnag |
Type: | Package |
Title: | Very Large Numbers in R |
Version: | 1.2-9-1 |
Authors@R: | person(given=c("Robin", "K. S."), family="Hankin", role = c("aut","cre"), email="[email protected]", comment = c(ORCID = "0000-0001-5982-0415")) |
Maintainer: | Robin K. S. Hankin <[email protected]> |
Depends: | R (>= 2.13.0), methods, Matrix (>= 1.5-0) |
Description: | Very large numbers in R. Real numbers are held using their natural logarithms, plus a logical flag indicating sign. Functionality for complex numbers is also provided. The package includes a vignette that gives a step-by-step introduction to using S4 methods. |
Suggests: | cubature, testthat, knitr, markdown, rmarkdown |
VignetteBuilder: | knitr |
License: | GPL |
URL: | https://github.com/RobinHankin/Brobdingnag, https://robinhankin.github.io/Brobdingnag/ |
Repository: | https://robinhankin.r-universe.dev |
RemoteUrl: | https://github.com/robinhankin/brobdingnag |
RemoteRef: | HEAD |
RemoteSha: | e5a42707bdf3bae16a23c414affe52a3d5be7eb9 |
Author: | Robin K. S. Hankin [aut, cre] (<https://orcid.org/0000-0001-5982-0415>) |
Index of help topics:
Arith-methods Methods for Function Arith in package Brobdingnag Brobdingnag-package Very Large Numbers in R Compare-methods Methods for Function Compare in Package Brobdingnag Re Real and imaginary manipulation [.brob Extract or Replace Parts of brobs or glubs abs Various logarithmic and circular functions for brobs as.numeric Coerces to numeric or complex form brob Brobdingnagian numbers brob-class Class "brob" brobmat Brobdingnagian matrices brobmat-class Class '"brobmat"' brobmat.mult Brobdingagian matrix arithmetic cbrob Combine Brobdingnagian vectors getP Get and set methods for brob objects glub Glubbdubdribian numbers: complex numbers with Brobdingnagian real and imaginary parts glub-class Class "glub" index-class Class '"index"' infinite Infinite brobs and glubs length Get lengths of brobs and glubs logic.brob Logical operations on brobs plot Basic plotting of Brobs print.brob Methods for printing brobs and glubs sum Various summary statistics for brobs and glubs swift-class Class "swift"
Real numbers are represented by two objects: a real, holding the
logarithm of their absolute values; and a logical, indicating the
sign. Multiplication and exponentiation are easy: the challenge is
addition. This is achieved using the (trivial) identity
where, WLOG,
.
Complex numbers are stored as a pair of brob
s: objects of class
glub
.
The package is a simple example of S4 methods.
However, it could be viewed as a cautionary tale: the underlying R concepts are easy yet the S4 implementation is long and difficult. I would not recommend using S4 methods for a package as simple as this; S3 methods would have been perfectly adequate. I would suggest that S4 methods should only be used when S3 methods are demonstrably inadequate.
Robin K. S. Hankin [aut, cre] (<https://orcid.org/0000-0001-5982-0415>)
Maintainer: Robin K. S. Hankin <[email protected]>
R. K. S. Hankin 2007. “Very Large Numbers in R: Introducing Package Brobdingnag”. R News, volume 7, number 3, pages 15-16
googol <- as.brob(10)^100 googol googol + googol/2 1/(googol + 1e99) (1:10)^googol googolplex <- 10^googol googolplex googolplex * googol # practically the same as googolplex (!)
googol <- as.brob(10)^100 googol googol + googol/2 1/(googol + 1e99) (1:10)^googol googolplex <- 10^googol googolplex googolplex * googol # practically the same as googolplex (!)
Methods for Arithmetic functions in package Brobdingnag: +
,
-
, *
, /
, ^
The unary arithmetic functions (viz “+
” and
“-
”) do no coercion.
The binary arithmetic functions coerce numeric
<op> brob
to
brob
; and numeric
<op> glub
,
complex
<op> brob
, and brob
<op> glub
,
to glub
.
Robin K. S. Hankin
x <- as.brob(1:10) y <- 1e10 x+y as.numeric((x+y)-1e10) x^(1/y)
x <- as.brob(1:10) y <- 1e10 x+y as.numeric((x+y)-1e10) x^(1/y)
Coerces an object of class brob
to numeric, or an object of
class glub
to complex
x |
Object of class |
... |
Further arguments (currently ignored) |
Function as.numeric()
coerces a brob
to numeric; if given
a glub
, the imaginary component is ignored (and a warning given).
Function as.complex()
coerces to complex.
If is greater than
.Machine$double.xmax
, then as.numeric(x)
returns
Inf
or -Inf
but no warning is given.
Robin K. S. Hankin
a <- as.brob(1:10) a <- cbrob(a, as.brob(10)^1e26) a as.numeric(a) as.complex(10i + a)
a <- as.brob(1:10) a <- cbrob(a, as.brob(10)^1e26) a as.numeric(a) as.complex(10i + a)
Create, coerce to or test for a Brobdingnagian object
brob(x = double(), positive) as.brob(x) is.brob(x)
brob(x = double(), positive) as.brob(x) is.brob(x)
x |
Quantity to be tested, coerced in to Brobdingnagian form |
positive |
In function |
Function as.brob()
is the user's workhorse: use this to coerce
numeric vectors to brob
s.
Function is.brob()
tests for its arguments being of class
brob
.
Function brob()
takes argument x
and returns a brob
formally equal to ; set argument
positive
to
FALSE
to return . Thus calling function
exp(x)
simply returns brob(x)
. This function is not
really intended for the end user: it is confusing and includes no
argument checking. In general numerical work, use function
as.brob()
instead, although be aware that if you really really
want , you should use
brob(1e7)
;
this would be an exact representation.
Real numbers are represented by two objects: a real, holding the
logarithm of their absolute values; and a logical, indicating the
sign. Multiplication and exponentiation are easy: the challenge is
addition. This is achieved using the (trivial) identity
where, WLOG,
.
Complex numbers are stored as a pair of brob
s: objects of class
glub
.
The package is a simple example of S4 methods. However, it could be viewed as a cautionary tale: the underlying R concepts are easy yet the S4 implementation is long and difficult. I would not recommend using S4 methods for a package as simple as this; S3 methods would have been perfectly adequate. I would suggest that S4 methods should only be used when S3 methods are demonstrably inadequate.
The package has poor handling of NA
and NaN
. Currently,
as.brob(1) + as.brob(c(1,NA))
returns an error.
Robin K. S, Hankin
googol <- as.brob(10)^100 googolplex <- 10^googol (googolplex/googol) / googolplex # Thus googolplex/googol == googolplex (!) # use cbrob() instead of c() when Brobdingnagian numbers are involved: cbrob(4,exp(as.brob(1e55)))
googol <- as.brob(10)^100 googolplex <- 10^googol (googolplex/googol) / googolplex # Thus googolplex/googol == googolplex (!) # use cbrob() instead of c() when Brobdingnagian numbers are involved: cbrob(4,exp(as.brob(1e55)))
The formal S4 class for Brobdingnagian numbers
Objects can be created by calls of the form new("brob",
...)
but this is not encouraged. Use functions brob()
and,
especially, as.brob()
instead.
x
:Object of class "numeric"
holding the log
of the absolute value of the number to be represented
positive
:Object of class "logical"
indicating
whether the number is positive (see Note, below)
Class "swift"
, directly.
Slot positive
indicates non-negativity, as zero is
conventionally considered to be “positive”.
Robin K. S. Hankin
new("brob",x=5,positive=TRUE) # not intended for the user as.brob(5) # Standard user-oriented idiom
new("brob",x=5,positive=TRUE) # not intended for the user as.brob(5) # Standard user-oriented idiom
Basic matrix arithmetic for Brobdingnagian numbers. Matrix addition, multiplication extraction and replacement implemented but not the determinant or matrix inverse.
brobmat(..., positive) newbrobmat(x,positive) as.brobmat(x) is.brobmat(x) brobmat_to_brob(x) diag(x,...) ## S3 method for class 'brobmat' print(x,...) t(x,...)
brobmat(..., positive) newbrobmat(x,positive) as.brobmat(x) is.brobmat(x) brobmat_to_brob(x) diag(x,...) ## S3 method for class 'brobmat' print(x,...) t(x,...)
x |
Argument |
... |
Further arguments |
positive |
Logical, indicating whether an element is positive |
Basic arithmetic for Brobdingnagian matrices.
To create a Brobdingnagian matrix, use as.brobmat()
; function
brobmat()
can be confusing.
Function brobmat()
is like brob()
in that it interprets
its first argument as the exponent (but creates a matrix); the sign of
the entry is given by Boolean argument positive
. Note that
brobmat()
accepts a Brobdingnagian vector as primary argument,
and in this case the sign is respected.
Function as.brobmat()
coerces a numeric matrix to a
brobmat
.
Generally return a brobmat
or brob
.
Robin K. S. Hankin
(M <- brobmat(-10:19,5,6)) all(M > 0) # should be TRUE (sic) as.brobmat(matrix(-10:19,5,6))
(M <- brobmat(-10:19,5,6)) all(M > 0) # should be TRUE (sic) as.brobmat(matrix(-10:19,5,6))
"brobmat"
The brobmat
class provides basic Brobdingnagian arithmetic for
matrices.
Objects can be created by calls of the form new("brobmat", ...)
,
although functions brobmat()
, as.brobmat()
are more
user-friendly.
x
:Object of class "matrix"
that specifes the
exponent
positive
:Object of class "logical"
that
specifies the sign
signature(x = "brobmat", i = "ANY", j = "ANY")
: ...
signature(x = "brobmat", i = "index", j = "index")
: ...
signature(x = "brobmat", i = "index", j = "missing")
: ...
signature(x = "brobmat", i = "missing", j = "index")
: ...
signature(x = "brobmat", i = "missing", j = "missing")
: ...
signature(x = "brobmat", i = "matrix", j = "missing")
: ...
signature(x = "brobmat", i = "index", j = "index")
: ...
signature(x = "brobmat", i = "index", j = "missing")
: ...
signature(x = "brobmat", i = "missing", j = "index")
: ...
signature(x = "brobmat", i = "matrix", j = "missing")
: ...
signature(x = "brobmat", i = "missing", j = "missing")
: ...
signature(x = "ANY", y = "brobmat")
: ...
signature(x = "brobmat", y = "ANY")
: ...
signature(x = "brobmat", y = "brobmat")
: ...
signature(e1 = "ANY", e2 = "brobmat")
: ...
signature(e1 = "brob", e2 = "brobmat")
: ...
signature(e1 = "brobmat", e2 = "ANY")
: ...
signature(e1 = "brobmat", e2 = "brob")
: ...
signature(e1 = "brobmat", e2 = "brobmat")
: ...
signature(e1 = "brobmat", e2 = "missing")
: ...
signature(x = "brobmat")
: ...
signature(x = "brobmat")
: ...
signature(from = "brobmat", to = "matrix")
: ...
signature(x = "brobmat")
: ...
signature(x = "brobmat")
: ...
signature(e1 = "ANY", e2 = "brobmat")
: ...
signature(e1 = "brobmat", e2 = "ANY")
: ...
signature(e1 = "brobmat", e2 = "brobmat")
: ...
signature(x = "brobmat")
: ...
signature(x = "brobmat")
: ...
signature(x = "brobmat")
: ...
signature(x = "brobmat")
: ...
signature(x = "brobmat")
: ...
signature(x = "brobmat")
: ...
signature(x = "brobmat")
: ...
signature(x = "brobmat")
: ...
signature(x = "brobmat")
: ...
signature(x = "brobmat")
: ...
signature(x = "brobmat")
: ...
signature(object = "brobmat")
: ...
signature(x = "brobmat")
: ...
Robin K. S. Hankin
Brobdingnag R News paper
showClass("brobmat")
showClass("brobmat")
Basic arithmetic for Brobdingnagian matrices
brobmat.mult(e1, e2) brobmat.add(e1, e2) brobmat.mult(e1, e2) brobmat.power(e1, e2) brobmat.inverse(e1) brobmat.greater(e1, e2) brobmat.equal(e1, e2) getat(e1,e2)
brobmat.mult(e1, e2) brobmat.add(e1, e2) brobmat.mult(e1, e2) brobmat.power(e1, e2) brobmat.inverse(e1) brobmat.greater(e1, e2) brobmat.equal(e1, e2) getat(e1,e2)
e1 , e2
|
Arguments coerced to |
These functions are helper functions used by the brobmat
Arith
group and are not designed to be user-friendly. Function getat()
is a helper function that sets attributes such as dimnames of returned
values.
Return a brobmat
, or logical for the comparison operators.
Robin K. S. Hankin
a <- brobmat(1:54,6,9) rownames(a) <- letters[1:6] a + 1e30 a-a b <- as.brobmat(matrix(rnorm(27),9,3)) colnames(b) <- month.abb[1:3] a %*% b
a <- brobmat(1:54,6,9) rownames(a) <- letters[1:6] a + 1e30 a-a b <- as.brobmat(matrix(rnorm(27),9,3)) colnames(b) <- month.abb[1:3] a %*% b
Combine Brobdingnagian or Glubdubbdribian vectors through concatenation
cbrob(x, ...)
cbrob(x, ...)
x |
Brobdingnagian vector |
... |
Other arguments coerced to brob form |
If any argument has class glub
, all arguments are coerced to
glub
s. Otherwise, if any argument has class brob
, all
arguments are coerced to brob
s.
Function cbrob()
operates recursively, calling .cPair()
repeatedly. Function .cPair()
uses S4 method dispatch to call
either .Brob.cpair()
or .Glub.cpair()
according to the
classes of the arguments.
As of R-2.4.0, it is apparently not possible to use S4 methods to
redefine c()
to coerce to class brob
form and
concatenate as expected. This would seem to be a reasonable
interpretation of c()
from the user's perspective.
Conceptually, the operation is simple: concatenate the value
slot and the positive
slot separately, then call brob()
on the two resulting vectors. When concatenating glub
objects,
the real and imaginary components (being brob
s) are
concatenated using .Brob.cpair()
The choice of name—cbrob()
—is not entirely logical.
Because it operates consistently on brob
and glub
objects, it might be argued that cSwift()
would be a more
appropriate name.
Robin K. S. Hankin; original idea due to John Chambers
a <- as.brob(2)^1e-40 cbrob(1:4,4:1,a) cbrob(1:4,a,1i)
a <- as.brob(2)^1e-40 cbrob(1:4,4:1,a) cbrob(1:4,a,1i)
Methods for comparison (greater than, etc) in package Brobdingnag
As for min()
and max()
, comparison is not entirely
straightforward in the presence of NA
s.
The low-level workhorses are .Brob.equal()
for equality and
.Brob.greater()
for ‘strictly greater than’. All other
comparisons are calculated by combining these two.
Comparison [function .Brob.compare()
] explicitly tests for a
zero length argument and if given one returns logical(0)
to
match base behaviour.
a <- as.brob(10)^(0.5 + 97:103) a < 1e100
a <- as.brob(10)^(0.5 + 97:103) a < 1e100
Get or set real and imaginary components of brob
s or
glub
s.
## S4 method for signature 'glub' Re(z) ## S4 method for signature 'glub' Im(z) ## S4 method for signature 'glub' Mod(z) ## S4 method for signature 'glub' Conj(z) ## S4 method for signature 'glub' Arg(z) Re(z) <- value Im(z) <- value
## S4 method for signature 'glub' Re(z) ## S4 method for signature 'glub' Im(z) ## S4 method for signature 'glub' Mod(z) ## S4 method for signature 'glub' Conj(z) ## S4 method for signature 'glub' Arg(z) Re(z) <- value Im(z) <- value
z |
object of class |
value |
object of class |
Functions Re()
and Im()
return an object of class
brob
; functions Re<-()
and Im<-()
return an object
of class glub
Robin K. S. Hankin
a <- cbrob(1:10,brob(1e100)) Im(a) <- 11:1 a
a <- cbrob(1:10,brob(1e100)) Im(a) <- 11:1 a
Methods for "["
and "[<-"
, i.e., extraction or
subsetting of brobs and glubs.
x |
Object of class brob or glub |
i |
elements to extract or replace |
value |
replacement value |
Always returns an object of the same class as x
.
If x
is a numeric vector and y
a brob, one might expect
typing x[1] <- y
to result in x
being a brob. This is
impossible, according to John Chambers.
Robin K. S. Hankin
a <- as.brob(10)^c(-100,0,100,1000,1e32) a[4] a[4] <- 1e100 a
a <- as.brob(10)^c(-100,0,100,1000,1e32) a[4] a[4] <- 1e100 a
Get and set methods for brobs: sign and value
getP(x) getX(x) sign(x) <- value
getP(x) getX(x) sign(x) <- value
x |
Brobdingnagian object |
value |
In function |
Robin K. S. Hankin
x <- as.brob(-10:10) sign(x) <- TRUE
x <- as.brob(-10:10) sign(x) <- TRUE
Create, coerce to or test for a Glubbdubdribian object
glub(real = double(), imag = double()) as.glub(x) is.glub(x)
glub(real = double(), imag = double()) as.glub(x) is.glub(x)
real , imag
|
Real and imaginary components of complex number: must be Brobdingnagian numbers |
x |
object to be coerced to or tested for Glubbdubdribian form |
A Glubbdubdribian number is the Brobdingnagian equivalent of a complex number.
Function glub()
takes two arguments that are coerced to
Brobdingnagian numbers and returns a Glubbdubdribian number. This
function is not really intended for the end user: it is confusing and
includes no argument checking. Use function as.glub()
instead.
Function as.glub()
is the user's workhorse: use this to coerce
numeric or complex vectors to Glubbdubdribian form.
Function is.glub()
tests for its arguments being Glubbdubdribian.
Function glub()
uses recycling inherited from cbind()
.
Robin K. S. Hankin
a <- as.glub(1:10 + 5i) a^2 - a*a f <- function(x){sin(x) +x^4 - 1/x} as.complex(f(a)) - f(as.complex(a)) # should be zero (in the first # term, f() works with glubs and coerces to # complex; in the second, f() # works with complex numbers directly)
a <- as.glub(1:10 + 5i) a^2 - a*a f <- function(x){sin(x) +x^4 - 1/x} as.complex(f(a)) - f(as.complex(a)) # should be zero (in the first # term, f() works with glubs and coerces to # complex; in the second, f() # works with complex numbers directly)
Complex Brobdingnagian numbers
A glub
object holds two slots, both brobs
, representing
the real and imaginary components of a complex vector.
real
:Object of class "brob"
representing the
real component
imag
:Object of class "brob"
representing the
imaginary component
Class "swift"
, directly.
signature(x = "brob", y = "glub")
: ...
signature(x = "ANY", y = "glub")
: ...
signature(x = "glub", y = "glub")
: ...
signature(x = "glub", y = "ANY")
: ...
signature(x = "glub", y = "brob")
: ...
signature(x = "glub")
: ...
signature(x = "glub")
: ...
Robin K. S. Hankin
a <- as.brob(45) new("glub",real=a, imag=a) as.brob(5+5i) # standard R idiom; imaginary component discarded as.glub(5+5i) # returns a Glubbdubdribian object
a <- as.brob(45) new("glub",real=a, imag=a) as.brob(5+5i) # standard R idiom; imaginary component discarded as.glub(5+5i) # returns a Glubbdubdribian object
"index"
A virtual class for matrix extraction, copied from the Matrix
package.
A virtual Class: No objects may be created from it.
signature(x = "brobmat", i = "index", j = "index")
: ...
signature(x = "brobmat", i = "index", j = "missing")
: ...
signature(x = "brobmat", i = "missing", j = "index")
: ...
signature(x = "brobmat", i = "index", j = "index")
: ...
signature(x = "brobmat", i = "index", j = "missing")
: ...
signature(x = "brobmat", i = "missing", j = "index")
: ...
Bates and Maechler, I guess
Douglas Bates and Martin Maechler (2019). Matrix: Sparse and Dense Matrix Classes and Methods. R package version 1.2-18. https://CRAN.R-project.org/package=Matrix
showClass("index")
showClass("index")
Brobdingnagian and Glubbdubdribian infinity
## S4 method for signature 'brob' is.infinite(x) ## S4 method for signature 'glub' is.infinite(x) ## S4 method for signature 'brob' is.finite(x) ## S4 method for signature 'glub' is.finite(x)
## S4 method for signature 'brob' is.infinite(x) ## S4 method for signature 'glub' is.infinite(x) ## S4 method for signature 'brob' is.finite(x) ## S4 method for signature 'glub' is.finite(x)
x |
vector of class brob or glub |
For a Brobdingnagian number, is.infinite()
returns TRUE
if
the exponent is infinite.
A Glubbdubdribian number is infinite if either the real or imaginary component is infinite.
Function is.finite()
is simply the logical negation of
is.infinite()
.
Robin K. S. Hankin
is.infinite(brob(c(1,4,Inf))) is.infinite(glub(3,Inf)) is.infinite(glub(Inf,3)) is.infinite(exp(1e300)) is.infinite(brob(1e300)) # (Brobdingnagian infinity is bigger than regular infinity ;-)
is.infinite(brob(c(1,4,Inf))) is.infinite(glub(3,Inf)) is.infinite(glub(Inf,3)) is.infinite(exp(1e300)) is.infinite(brob(1e300)) # (Brobdingnagian infinity is bigger than regular infinity ;-)
Get lengths of brob and glub vectors
## S4 method for signature 'brob' length(x) ## S4 method for signature 'glub' length(x)
## S4 method for signature 'brob' length(x) ## S4 method for signature 'glub' length(x)
x |
vector of class brob or glub |
Robin K. S. Hankin
x <- as.brob(-10:10) length(x)
x <- as.brob(-10:10) length(x)
Logical operations on brobs are not supported
The S4 group generic “Logic” appeared in R-2.4.0-patched.
Carrying out logical operations in this group will call
.Brob.logic()
, which reports an error.
Negation, “!
”, is not part of this group: attempting to
negate a brob will not activate .Brob.logic()
; an “invalid
argument type” error is given instead.
Robin K. S. Hankin
## Not run: !brob(10) ## End(Not run)
## Not run: !brob(10) ## End(Not run)
Various elementary functions for brobs
x |
Object of class |
base |
In function |
For brob
s: apart from abs()
, log()
, exp()
,
sinh()
and cosh()
, these functions return
f(as.numeric(x))
so are numeric; the exceptional functions
return brob
s.
For glub
s: mostly direct transliteration of the appropriate
formula; one might note that log(z)
is defined as
glub(log(Mod(x)),Arg(x))
.
Robin K. S. Hankin
exp(as.brob(3000)) #exp(3000) is represented with zero error
exp(as.brob(3000)) #exp(3000) is represented with zero error
Plotting methods. Essentially, any brob is coerced to a numeric and
any glub is coerced to a complex, and the argument or arguments are
passed to plot()
.
plot(x, y, ...)
plot(x, y, ...)
x , y
|
Brob or glub |
... |
Further arguments passed to |
Robin K. S. Hankin
plot(as.brob(1:10))
plot(as.brob(1:10))
Methods for printing brobs and glubs nicely using exponential notation
## S3 method for class 'brob' print(x, ...) ## S3 method for class 'glub' print(x, ...)
## S3 method for class 'brob' print(x, ...) ## S3 method for class 'glub' print(x, ...)
x |
An object of class |
... |
Further arguments (currently ignored) |
Robin K. S. Hankin
a <- as.brob(1:5) dput(a) a
a <- as.brob(1:5) dput(a) a
Various summary statistics for brobs and glubs
x , ...
|
Objects of class |
na.rm |
Boolean, with default |
For a brob
object, being NA
is not entirely
straightforward. The S4 method for is.na
is too
“strict” for some of the functions considered here. Consider
max(a)
where a
includes only positive, fully
specified, elements, and elements with known negative sign and
exponents that include NA
values. Here, max(a)
is unambiguously determined.
Similar logic applies to min()
and, by extension,
range()
.
Function prod()
is very slow for long glub
vectors. It has to compute four Brobdingnagian products and two
Brobdingnagian sums per element of its argument, and this takes a long
time.
Robin K. S. Hankin
a <- as.brob(1:10) max(cbrob(1:10,brob(NA,FALSE)))
a <- as.brob(1:10) max(cbrob(1:10,brob(NA,FALSE)))
A (virtual) class that extends brob
and
glub
objects
A virtual Class: No objects may be created from it.
No methods defined with class "swift" in the signature.
Robin K. S. Hankin