# TODO(#45): use matrix() directly
matrix64 = function(x, nrow=1L, ncol=1L, byrow=FALSE) {
x = as.integer64(x)
if (byrow) {
dim(x) = c(ncol, nrow)
t(x)
} else {
dim(x) = c(nrow, ncol)
x
}
}
array64 = function(x, dim) {
x = as.integer64(x)
dim(x) = dim
x
}
# Test that 'expr' gives the same result whether
# the input is integer or integer64, in the sense
# of equivalence after casting between the types.
# expr gets integer names converted to integer64,
# retaining attributes (esp. for arrays), and
# we test that the result of evaluating expr
# is equivalent (after converting back to integer)
# Starting with integer and casting to integer64
# guarantees representation, where casting integer64
# to integer might have to stipulate inputs must be
# representable as integer.
expect_int_32_64_equivalent <- function(expr) {
# Capture the unevaluated expression
esub = substitute(expr)
evar = all.vars(esub)
# replace all integer values in expr with integer64 equivalents
# in a tailored environment
parent_ = parent.frame()
int64_env = new.env(parent = parent_)
for (key in evar) {
val = get(key, parent_)
if (!is.integer(val)) next
assign(key, as.integer64(val), envir=int64_env)
attributes(int64_env[[key]]) = attributes(val)
}
int_result = eval(expr, parent_)
int64_result = eval(expr, int64_env)
int64_result_as_int = as(int64_result, typeof(int_result))
# ignore class (which includes integer64)
a64 = attributes(int64_result)
for (a in setdiff(names(a64), "class"))
attr(int64_result_as_int, a) = a64[[a]]
expect_identical(int64_result_as_int, int_result)
}
skip_if_not_r_version = function(ver) {
skip_if(getRversion() < ver, paste("R version >=", ver, "required."))
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.