我正在研究一组脚本并使用 s3 类和方法来使事情变得更简洁。
班级结构分为三个层次。
- 级别 1:data.frame
- 级别 2:sample_report 或 fix_report
- 第 3 级:stim_report
我想编写一个函数,它只接受 stim_report 类的数据帧,然后根据 stim_report 是从 sample_report 继承还是从 fix_report 继承来调度不同的方法。
显然,我可以做类似的事情
myfunction.stim_report(df)
if ("sample_report" %in% class(df)) {
% do something
} else if ("fix_report" %in% class(df)) {
% do something
}
但这违背了方法调度的目的。
请注意,如果数据框的类不是 stim_report,我需要一些东西才能工作,以便函数返回错误。所以我想我也可以这样做:
myfunction.fix_report(df)
if ("stim_report" %in% class(df)) {
% do something
} else {
stop("No method found")
}
myfunction.sample_report(df)
if ("stim_report" %in% class(df)) {
% do something
} else {
stop("No method found")
}
但同样,这感觉与 S3 方法的全部要点背道而驰。
有正确的方法吗?