基础

  1. 每当将 S3 对象传递给泛型(泛型函数的缩写)时,它的行为与其基础基类型不同
  2. 判断一个函数是否为泛型的最简单方法是使用sloop::ftype()并在输出中查找“泛型”:
    1. ftype(print)
    2. #> [1] "S3" "generic"
    3. ftype(str)
    4. #> [1] "S3" "generic"
    5. ftype(unclass)
    6. #> [1] "primitive"
    generic function的特点:
    泛型函数定义了一个接口,该接口根据参数的类(几乎总是第一个参数)使用不同的实现。(uses a different implementation depending on the class of an argument)

class

R中如何创建S3对象,
您可以在创建过程中使用 structure(),或者在事后使用 class<-():

  1. # Create and assign class in one step
  2. x <- structure(list(), class = "my_class")
  3. # Create, then set class
  4. x <- list()
  5. class(x) <- "my_class"