Become an expert in R — Interactive courses, Cheat Sheets, certificates and more!
Get Started for Free

swap

Reading and writing in one operation (high-level)


Description

The generic swap combines x[i] and x[i] <- value in a single operation.

Usage

swap(x, value, ...)
## S3 method for class 'ff'
swap(x, value, i, add = FALSE, pack = FALSE, ...)
## S3 method for class 'ff_array'
swap(x, value, ..., bydim = NULL, drop = getOption("ffdrop"), add = FALSE, pack = FALSE)
## Default S3 method:
swap(x, value, ..., add = FALSE)

Arguments

x

a ff or ram object

value

the new values to write, possibly recycled, see [.ff

i

index information, see [.ff

...

missing OR up to length(dim(x)) index expressions OR (ff only) hi objects

drop

logical scalar indicating whether array dimensions shall be dropped

bydim

how to interpret vector to array data, see [.ff

add

TRUE if the values should rather increment than overwrite at the target positions, see readwrite.ff

pack

FALSE to prevent rle-packing in hybrid index preprocessing, see as.hi

Details

y <- swap(x, value, i, add=FALSE, ...)

  is a shorter and more efficient version of

  y <- x[i, add=FALSE, ...]
  x[i, add=FALSE, ...] <- value

  and

  y <- swap(x, value, i, add=TRUE, ...)

  is a shorter and more efficient version of

  y <- x[i, add=TRUE, ...]
  y <- y + value
  x[i, add=FALSE, ...] <- y

Value

Values at the target positions. More precisely swap(x, value, i, add=FALSE) returns the old values at the position i while swap(x, value, i, add=TRUE) returns the incremented values of x.

Note

Note that swap.default changes the object in its parent frame and thus violates R's usual functional programming logic. When using add=TRUE, duplicated index positions should be avoided, because ff and ram objects behave differently:

swap.ff(x, 1, c(3,3), add=TRUE)
  # will increment x at position 3 TWICE by 1, while
  swap.default(x, 1, c(3,3), add=TRUE)
  # will increment x at position 3 just ONCE by 1

Author(s)

Jens Oehlschlägel

See Also

Examples

x <- ff("a", levels=letters, length=52)
  y <- swap(x, "b", sample(length(x), 26))
  x
  y
  rm(x,y); gc()

ff

Memory-Efficient Storage of Large Data on Disk and Fast Access Functions

v4.0.4
GPL-2 | GPL-3 | file LICENSE
Authors
Daniel Adler [aut], Christian Gläser [aut], Oleg Nenadic [aut], Jens Oehlschlägel [aut, cre], Martijn Schuemie [aut], Walter Zucchini [aut]
Initial release
2020-10-13

We don't support your browser anymore

Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.