R语言中编写S3例子

参阅《R语言编程艺术》,R语言学习笔记

R中所有的东西(从数字到字符串到矩阵都是对象). R支持“封装”,“多态”,“继承”.

R中原始的类机构即S3类,现在任然在R的使用中占据主导地位。事实上,大多数R中内置的类都是S3类.

一个S3类包含一个列表,再附加上一个类名属性和调度的功能.后者式泛型函数的使用变成可能.R是多态的,在某种意义上说,同一个函数可以针对不同的类调用不同的操作. 即相同的函数使用不同的类对象时可以调用不同的操作. 多态可以促进代码的可重用性.多态使用户更容易记住相应的命令,而且为用户探索新的库函数及其相关的类带来不少方便和乐趣.

 rm(list=ls(all=TRUE))
 j <- list(name="Joe",salary=5000,union=T)
 j
# $name
# [1] "Joe"

# $salary
# [1] 5000

#$union
#[1] TRUE

 class(j) <- "employee"
 attributes(j)
#$names
#[1] "name"   "salary" ""      

#$class
#[1] "employee"

print(j)

本质上,j在打印时被当做一个列表。现在编写我们自己的打印方法:

print.employee <- function(wrkr){
cat(wrkr$name,"\n")
cat("salary",wrkr$salsary,"\n")
cat("union member",wrkr$union,"\n")
}
print(j)
#Joe 
#salary 
#union member TRUE 

 j
#Joe 
#salary 
#union member TRUE 

使用继承

继承的思想是在已有类的基础上创建新的类,例如,在上例中创建针对小时工的新类"hrlyemployee", 作为“employee”的子类,如下:

 k <- list(name="Kate",salary=68000,union=F,hrsthismonth=2)
 k
#$name
#[1] "Kate"

#$salary
#[1] 68000

#$union
#[1] FALSE

#$hrsthismonth
#[1] 2

 class(k) <- c("hrlyemployee","employee")
 k

#Kate 
#salary 
#union member FALSE 

直接键入k即可调用print(k),一旦键入k,就会调用UseMethod(),去查找"hrlyemployee"类的打印方法,这是因为"hrlyemployee"是k的两个类名称的第一个,结果没有找到对应的方法,所以UseMethod()尝试查找另一个类“employee”对应的打印方法,找到print.employee(), 然后执行该函数.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: S3 方法是在 S3 系统的一种型的函数,用于在 R 实现型多态。具体来说,S3 方法允许我们为不同型的对象定义不同的方法。 在 R 语言,qda 函数是一个 S3 方法。它有两个版本,一个是 s3 方法,另一个是 default s3 方法。s3 方法适用于某些特定的型的对象,而 default s3 方法则适用于其他型的对象。 例如,如果我们在调用 qda 函数时传入的是一个 "matrix" 型的对象,那么会使用 s3 方法;如果传入的是其他型的对象,则会使用 default s3 方法。 在使用 qda 函数时,我们需要注意这两个版本的区别,以便选择正确的版本。 ### 回答2: 在R语言,qda是quadratic discriminant analysis的简称,是一种常用的统计学习方法。qda的s3 method和default s3 method是两种不同的函数调用方式。 qda的s3 method是指在R语言,通过调用qda()函数来进行二次判别分析。该方法需要传入一系列的参数,如训练数据集和分变量。在调用qda()函数后,会返回一个qda对象,可以通过该对象进行其他相关分析,如预测结果和绘制判别边界等。 default s3 method是指通过对qda对象进行特定的操作来进行分析。通过使用qda对象的print()、summary()和predict()等函数,可以打印或获取qda对象的相关信息,如判别变量的均值、判别函数的系数以及预测结果等。 两种方法都是用于进行二次判别分析的函数调用方式,但在具体使用时有所区别。qda的s3 method主要用于进行二次判别分析的建模过程,而default s3 method则主要用于对建立好的qda对象进行进一步的分析和操作。用户可以根据实际需求选择合适的方法来进行统计学习分析。 ### 回答3: 在R语言,qda函数代表了判别分析的线性判别方法(Quadratic Discriminant Analysis, QDA)。在该函数使用时,可以指定使用的s3方法(也称为S3 method)来进行分S3方法是一种面向对象编程的概念,它允许根据对象的别来选择合适的函数,以便对这些对象进行特定的方法操作。 qda函数的默认s3方法可以理解为当没有指定其他s3方法时,会使用的默认方法。默认的s3方法在qda函数基于输入数据的型,选择适当的方法来预测和分。对于数值型变量,qda默认使用线性判别分析;对于分型变量,则会选择线性判别方法,其假定别的协方差矩阵是相等的。 另一方面,qda函数还支持自定义的s3方法。用户可以根据数据的特性和需求,为不同的数据型和情况指定不同的方法。例如,如果用户认为在特定情况下,别的协方差矩阵不应该被认为是相等的,则可以自定义一个s3方法,使用不同的判别分析方法来进行分。 总而言之,qda函数s3方法提供了一种灵活的分模型选择机制。默认的s3方法基于输入数据型和特性,选择合适的方法进行分,而自定义的s3方法则允许用户根据具体需求来指定不同的方法。这种灵活性使得qda函数能够适应不同的数据分析和建模需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值