| 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] (ORCID: <https://orcid.org/0000-0001-5982-0415>) |
| Maintainer: | Robin K. S. Hankin <[email protected]> |
| License: | GPL |
| Version: | 1.3-1 |
| Built: | 2026-05-28 07:07:26 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.3-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 (>= 3.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. |
| Imports: | methods, Matrix (>= 1.5-0), graphics |
| Suggests: | cubature, testthat, knitr, markdown, rmarkdown |
| VignetteBuilder: | knitr |
| License: | GPL |
| URL: | https://github.com/RobinHankin/Brobdingnag, https://robinhankin.github.io/Brobdingnag/ |
| RoxygenNote: | 7.3.3 |
| Encoding: | UTF-8 |
| Repository: | https://robinhankin.r-universe.dev |
| Date/Publication: | 2026-01-28 15:02:52 UTC |
| RemoteUrl: | https://github.com/robinhankin/brobdingnag |
| RemoteRef: | HEAD |
| RemoteSha: | fa9c2a449186ce739aa5d9d41de9686d6fa2348b |
| Author: | Robin K. S. Hankin [aut, cre] (ORCID: <https://orcid.org/0000-0001-5982-0415>) |
Index of help topics:
[.brob Extract or Replace Parts of brobs or glubs
abs Various logarithmic and circular functions for
brobs
Arith-methods Methods for Function Arith in package
Brobdingnag
as.numeric Coerces to numeric or complex form
brob Brobdingnagian numbers
brob-class Class "brob"
Brobdingnag-package Very Large Numbers in R
brobmat Brobdingnagian matrices
brobmat-class Class '"brobmat"'
brobmat.mult Brobdingagian matrix arithmetic
cbrob Combine Brobdingnagian vectors
Compare-methods Methods for Function Compare in Package
Brobdingnag
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
Re Real and imaginary manipulation
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 brobs: 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] (ORCID: <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 brobs.
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 brobs: 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 idiomnew("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 %*% ba <- 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
glubs. Otherwise, if any argument has class brob, all
arguments are coerced to brobs.
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 brobs) 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 NAs.
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 < 1e100a <- as.brob(10)^(0.5 + 97:103) a < 1e100
Get or set real and imaginary components of brobs or
glubs.
## 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 aa <- 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 aa <- 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) <- valuegetP(x) getX(x) sign(x) <- value
x |
Brobdingnagian object |
value |
In function |
Robin K. S. Hankin
x <- as.brob(-10:10) sign(x) <- TRUEx <- 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 objecta <- 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 brobs: apart from abs(), log(), exp(),
sinh() and cosh(), these functions return
f(as.numeric(x)) so are numeric; the exceptional functions
return brobs.
For glubs: mostly direct transliteration of the appropriate
formula; one might note that log(z) is defined as
glub(log(Mod(x)),Arg(x)).
Function sum1() takes a single argument, interpreted as a
vector of brobs, and returns its sum (compare sum() which can
take any number of arguments).
Robin K. S. Hankin
exp(as.brob(3000)) #exp(3000) is represented with zero errorexp(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) aa <- 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.
S4 generic sum() dispatches on its first argument,
and is not perfect. It will not automatically coerce brobs to glubs,
nor numerics to brobs. To ensure glub-consistency, use
sum(as.glub(1i), ...).
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