Travis build status AppVeyor build status Coverage status

inplace

In-place operators for R

Example

# devtools::install_github("privefl/inplace")
# or install.packages("inplace")
library(inplace)

address <- data.table::address
mat <- matrix(rnorm(5e7), 1e4)
addr0 <- address(mat)
mat[1:5, 1:5]

# copy
system.time(
  mat2 <- mat * 2
)
mat2[1:5, 1:5]

# modification in-place
system.time(
  mat %*<-% 2
)
mat[1:5, 1:5]
stopifnot(address(mat) == addr0)

# Also works with a subset
mat[1:2, 1:2] %*<-% 2
mat[1:5, 1:5]
stopifnot(address(mat) == addr0)

## SWEEPS
means <- colMeans(mat)
system.time(
  mat2 <- sweep(mat, 2, means, '-')
)
# modification in-place
system.time(
  sweep2_in_place(mat, means, '-')
)
stopifnot(identical(mat, mat2))
stopifnot(address(mat) == addr0)

Beware

If many names points to the same object, they will be all modified, which is not the default behaviour of base R.

(X <- runif(4))
X2 <- X

X %*<-% 2
X
X2