我可以在 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 gevp
、gpdp
和其他两个,我为每个创建了通用函数 plot
和 summary
四个 classes。我想知道我是否可以只为四个 class 创建一个通用函数 plot
和 summary
,就像在里面一样,我要选择 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)
比如,我有四个 class gevp
、gpdp
和其他两个,我为每个创建了通用函数 plot
和 summary
四个 classes。我想知道我是否可以只为四个 class 创建一个通用函数 plot
和 summary
,就像在里面一样,我要选择 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)