Fast calculation of 'z <- x OP y' and 'z <- t(t(x) OP y)', where OP can be +, -, *, and /. For + and *, na.rm = TRUE will drop missing values first.
x_OP_y(x, y, OP, xrows = NULL, xcols = NULL, yidxs = NULL,
commute = FALSE, na.rm = FALSE)
t_tx_OP_y(x, y, OP, xrows = NULL, xcols = NULL, yidxs = NULL,
commute = FALSE, na.rm = FALSE)A character specifying which operator to use.
A vector indicating subset of rows
(and/or columns) to operate over 'x'. If NULL, no
subsetting is done.
A vector indicating subset of elements to
operate over 'y'. If NULL, no subsetting is done.
If TRUE, 'y OP x' ('t(y OP
t(x))') is calculated, otherwise 'x OP y' ('t(t(x) OP y)').
If TRUE, missing values are
excluded.
If na.rm = TRUE, then missing values are
"dropped" before applying the operator to each pair of values. For
instance, if x[1, 1] is a missing value, then the result of
x[1, 1] + y[1] equals y[1]. If also y[1] is a missing
value, then the result is a missing value. This only applies to additions
and multiplications. For subtractions and divisions, argument na.rm
is ignored.
x <- matrix(c(1, 2, 3, NA, 5, 6), nrow = 3, ncol = 2)
# Add 'y' to each column
y <- 1:2
z0 <- x + y
z1 <- x_OP_y(x, y, OP = "+")
print(z1)
#> [,1] [,2]
#> [1,] 2 NA
#> [2,] 4 6
#> [3,] 4 8
stopifnot(all.equal(z1, z0))
# Add 'y' to each row
y <- 1:3
z0 <- t(t(x) + y)
z1 <- t_tx_OP_y(x, y, OP = "+")
print(z1)
#> [,1] [,2]
#> [1,] 2 NA
#> [2,] 5 6
#> [3,] 5 9
stopifnot(all.equal(z1, z0))