unipos returns the positions of those elements returned by unique().
a vector or a data frame or an array or NULL.
ignored
The order in which positions of unique values will be returned, see details
ignored
NULL or the number of unique values (including NA). Providing
nunique can speed-up when x has no cache. Note that a wrong nunique
can cause undefined behaviour up to a crash.
NULL for automatic method selection or a suitable low-level method, see details
an integer vector of positions
This function automatically chooses from several low-level functions
considering the size of x and the availability of a cache.
Suitable methods are
hashmapupo (simultaneously creating and using a hashmap)
hashupo (first creating a hashmap then using it)
sortorderupo (fast ordering)
orderupo (memory saving ordering).
The default order="original" collects unique values in the order of
the first appearance in x like in unique(), this costs extra processing.
order="values" collects unique values in sorted order like in table(),
this costs extra processing with the hash methods but comes for free.
order="any" collects unique values in undefined order, possibly faster.
For hash methods this will be a quasi random order, for sort methods this
will be sorted order.
unique.integer64() for unique values and match.integer64()
for general matching.
x <- as.integer64(sample(c(rep(NA, 9), 1:9), 32, TRUE))
unipos(x)
#> [1] 1 2 4 5 9 18 23 26
unipos(x, order="values")
#> [1] 1 4 5 23 26 9 2 18
stopifnot(identical(unipos(x), (1:length(x))[!duplicated(x)]))
stopifnot(identical(unipos(x), match.integer64(unique(x), x)))
stopifnot(identical(unipos(x, order="values"), match.integer64(unique(x, order="values"), x)))
stopifnot(identical(unique(x), x[unipos(x)]))
stopifnot(identical(unique(x, order="values"), x[unipos(x, order="values")]))