R Under development (unstable) (2023-12-09 r85665 ucrt) -- "Unsuffered Consequences" Copyright (C) 2023 The R Foundation for Statistical Computing Platform: x86_64-w64-mingw32/x64 R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > library("matrixStats") > library("utils") ## utils::str > > # - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # Local functions > # - - - - - - - - - - - - - - - - - - - - - - - - - - - - > psortKM_R <- function(x, k, m) { + x <- sort(x) + x[(k - m + 1):k] + } > > psortKM_R2 <- function(x, k, m) { + partial <- (k - m + 1):k + x <- sort.int(x, partial = partial) + x[partial] + } > > > # - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # Consistency checks > # - - - - - - - - - - - - - - - - - - - - - - - - - - - - > set.seed(1) > > cat("Consistency checks:\n") Consistency checks: > x <- 1:30 > x[18:20] <- 20 > y <- sample(x) > cat("x:\n") x: > str(x) num [1:30] 1 2 3 4 5 6 7 8 9 10 ... > cat("sample(x):\n") sample(x): > str(y) num [1:30] 25 4 7 1 2 23 11 14 20 20 ... > > for (k in c(1L, 2L, 20L, 21L, length(x))) { + for (m in 1:min(5L, k)) { + px0 <- psortKM_R(x, k = k, m = m) + px0b <- psortKM_R2(x, k = k, m = m) + stopifnot(identical(px0b, px0)) + px1 <- matrixStats:::.psortKM(x, k = k, m = m) + cat(sprintf(".psortKM(x, k = %d, m = %d):\n", k, m)) + print(px1) + stopifnot(identical(px1, px0)) + + py0 <- psortKM_R(y, k = k, m = m) + py0b <- psortKM_R2(y, k = k, m = m) + stopifnot(identical(py0b, py0)) + py1 <- matrixStats:::.psortKM(y, k = k, m = m) + cat(sprintf(".psortKM(y, k = %d, m = %d):\n", k, m)) + print(py1) + stopifnot(identical(py1, py0)) + stopifnot(identical(py1, px1)) + } # for (m ...) + } # for (k ...) .psortKM(x, k = 1, m = 1): [1] 1 .psortKM(y, k = 1, m = 1): [1] 1 .psortKM(x, k = 2, m = 1): [1] 2 .psortKM(y, k = 2, m = 1): [1] 2 .psortKM(x, k = 2, m = 2): [1] 1 2 .psortKM(y, k = 2, m = 2): [1] 1 2 .psortKM(x, k = 20, m = 1): [1] 20 .psortKM(y, k = 20, m = 1): [1] 20 .psortKM(x, k = 20, m = 2): [1] 20 20 .psortKM(y, k = 20, m = 2): [1] 20 20 .psortKM(x, k = 20, m = 3): [1] 20 20 20 .psortKM(y, k = 20, m = 3): [1] 20 20 20 .psortKM(x, k = 20, m = 4): [1] 17 20 20 20 .psortKM(y, k = 20, m = 4): [1] 17 20 20 20 .psortKM(x, k = 20, m = 5): [1] 16 17 20 20 20 .psortKM(y, k = 20, m = 5): [1] 16 17 20 20 20 .psortKM(x, k = 21, m = 1): [1] 21 .psortKM(y, k = 21, m = 1): [1] 21 .psortKM(x, k = 21, m = 2): [1] 20 21 .psortKM(y, k = 21, m = 2): [1] 20 21 .psortKM(x, k = 21, m = 3): [1] 20 20 21 .psortKM(y, k = 21, m = 3): [1] 20 20 21 .psortKM(x, k = 21, m = 4): [1] 20 20 20 21 .psortKM(y, k = 21, m = 4): [1] 20 20 20 21 .psortKM(x, k = 21, m = 5): [1] 17 20 20 20 21 .psortKM(y, k = 21, m = 5): [1] 17 20 20 20 21 .psortKM(x, k = 30, m = 1): [1] 30 .psortKM(y, k = 30, m = 1): [1] 30 .psortKM(x, k = 30, m = 2): [1] 29 30 .psortKM(y, k = 30, m = 2): [1] 29 30 .psortKM(x, k = 30, m = 3): [1] 28 29 30 .psortKM(y, k = 30, m = 3): [1] 28 29 30 .psortKM(x, k = 30, m = 4): [1] 27 28 29 30 .psortKM(y, k = 30, m = 4): [1] 27 28 29 30 .psortKM(x, k = 30, m = 5): [1] 26 27 28 29 30 .psortKM(y, k = 30, m = 5): [1] 26 27 28 29 30 > > proc.time() user system elapsed 0.20 0.03 0.20