Learn R Programming

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

Copy Link

Version

Install

install.packages('inplace')

Monthly Downloads

195

Version

0.1.2

License

GPL-3

Issues

Pull Requests

Stars

Forks

Last Published

August 24th, 2020

Functions in inplace (0.1.2)

inplace-package

inplace: In-place Operators for R
inplace-op

In-place operators
inplace-sweep

Sweep