R/set_class.R

Defines functions strip_class add_class set_class

Documented in add_class set_class strip_class

#' Modify object class attriutes
#'
#' Set class of an object. Optionally append or prepend to exiting class
#' attributes. `add_class` is short for `set_class(x, class, "prepend")`.
#' `strip_class` removes matching class strings from the class attribute vector.
#'
#' @param x Object to assign new class to.
#' @param class Class value to add/strip.
#' @param add Possible values: "overwrite", "prepend", "append"
#' @return Object x as class value.
#' @export
set_class <- function(x, class, add = c("overwrite", "prepend", "append")) {
  add <- match.arg(add)
  class <- switch(add,
    overwrite = class,
    prepend = unique(c(class, class(x))),
    append = unique(c(class(x), class))
  )
  if (length(class) == 0) { # for class == ""
    unclass(x)
  } else {
    `class<-`(x, class)
  }
}
#' @export
#' @rdname set_class
add_class <- function(x, class) {
  set_class(x, class, "prepend")
}
#' @export
#' @rdname set_class
strip_class <- function(x, class) {
  classes <- class(x)[!class(x) %in% class]
  set_class(x, classes)
}

Try the gggenomes package in your browser

Any scripts or data that you put into this service are public.

gggenomes documentation built on Sept. 11, 2024, 8:55 p.m.