Reading and writing in one operation (high-level)
The generic swap
combines x[i]
and x[i] <- value
in a single operation.
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)
x |
a ff or ram object |
value |
the new values to write, possibly recycled, see |
i |
index information, see |
... |
missing OR up to length(dim(x)) index expressions OR (ff only) |
drop |
logical scalar indicating whether array dimensions shall be dropped |
bydim |
how to interpret vector to array data, see |
add |
TRUE if the values should rather increment than overwrite at the target positions, see |
pack |
FALSE to prevent rle-packing in hybrid index preprocessing, see |
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
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 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
Jens Oehlschlägel
x <- ff("a", levels=letters, length=52) y <- swap(x, "b", sample(length(x), 26)) x y rm(x,y); gc()
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.