summaryrefslogtreecommitdiff
path: root/R/rsc.R
blob: 6cf4e15e696b967526dc78c1417af4312fcfe04b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
rsc <- function(cv, threshold = "minimum") {
  if (class(cv) == "rsc_cv") {
    if (is.numeric(threshold)) {
      if (length(threshold) > 1) {
        stop("if a specific value for 'threshold' is chosen, this must be a single numeric value in (0,1)")
      }
      else if (threshold <= 0 | threshold >= 1) {
        stop("if a specific value for 'threshold' is chosen, this must be a single numeric value in (0,1)")
      }
    }
    else {
      if ({
        threshold != "minimum"
      } & {
        threshold != "minimum1se"
      }) {
        stop("'threshold' must be one of the following: 'minimum', 'minimum1se', a numeric value in (0,1).")
      }
      if (threshold == "minimum") {
        threshold <- cv$minimum
      }
      else if (threshold == "minimum1se") {
        threshold <- cv$minimum1se
      }
    }
    cv$rmadvec[abs(cv$rmadvec) < threshold] <- 0
    nc <- length(cv$rmadvec)
    p <- {
      1 + sqrt(1 + 8 * nc)
    }/2
    R <- Matrix(1, nrow = p, ncol = p, sparse = TRUE)
    R[lower.tri(R, diag = FALSE)] <- cv$rmadvec
    R <- forceSymmetric(R, uplo = "L")
    if (!is.null(cv$varnames)) {
      dimnames(R)[[1]] <- dimnames(R)[[2]] <- cv$varnames
    }
  }
  else {
    stop("'cv' must be a an object of class 'rsc_cv' obtained from 'rsc::rsc_cv'")
  }
  return(R)
}