我可以在 R 中为 class 的多个对象声明一个通用函数,例如 'plot 或 'summary' 吗?

Can I declare just one generic function in R like 'plot or 'summary' for more than one object of the class?

比如,我有四个 class gevpgpdp 和其他两个,我为每个创建了通用函数 plotsummary四个 classes。我想知道我是否可以只为四个 class 创建一个通用函数 plotsummary,就像在里面一样,我要选择 class 的对象我要。

您可以在这里利用继承,并将值向量分配给对象的 class。当 print 没有找到 class_x 的方法时,它将继续寻找 class generic_class.

的方法
x <- structure("This is the object of class 'class-x'", 
               class = c("class_x", "generic_class"))

y <- structure("This is the object of class 'class-y'", 
               class = c("class_y", "generic_class"))

print.generic_class <- function(x, ...)
{
  print("This prints the same thing for 'class_x' and 'class_y'")
}

x

y

如果您想了解更多关于管理 classes 和对象的知识,我推荐 Hadley 的优秀书籍 Advanced R。相关章节可在线获取 here。我不知道您的底层代码,并且 S3 和更高级的 S4 系统之间存在差异,因此这是定义特定于您的 class.

函数的最简单的可能方法。

关键是以 function.class 格式编写函数调用。 print.gevp 函数应该包含您已经为打印 class gevp 的对象编写的任何函数。对此要小心,因为您最终可能会为 print 创建一个与打印无关的函数。 # 生成测试数据 some_data <- 标准 (3) class(some_data) <- "gevp" more_data <- runif(3) class(more_data) <- "gpdp"

# Create examples of the print functions for both classes
print.gevp <- function(dta) {
  print(paste0("Here is a value of class gevp: ", dta))
}

print.gpdp <- function(dta) {
  print(paste0("Here is a value of class gpdp: ", dta))
}

# Notice how calling the generic print function now invokes the specific
# function for each class
print(some_data)
print(more_data)