第 14 章 s3及s4类

14.1 S3类

S3类其实是一种class属性有值的列表。可以看List13章节来了解如何创建S3对象,以及访问其元素。

In the code example below, as an example of handling objects of S3, we show the function that receives the return value of function lm() and computes RMSE (Root Mean Square Error) as an index of the prediction accuracy of the model in the learning data.

在下面的代码示例中,作为处理S3对象的例子,我们展示了接收线性拟合函数lm()的返回值,并以此计算RMSE(均方根误差)值的函数。RMSE是一种表示模型对学习数据的预测准确率的指标。

使用R中自带的数据mtcars来拟合车的燃油效率,并计算模型的RMSE。

14.2 S4类

14.2.1 访问槽(slot)

slot翻译为槽的依据,来源于Rcpp:R与C++的无缝整合一书。在P65,对S4类的讲述中,将slot译为槽。

使用slot()成员函数,可以访问一个S4类对象的槽。此外,使用hasSlot()成员函数,可以检查一个对象是否有指定名称的槽。

14.2.2 创建一个新的S4类对象

Rcpp不能单独地定义一个新的S4类,但是你可以在R中创建一个S4类的对象。下面的代码定义了如何在R中定义一个S4类Person,然后在Rcpp中创建Person类的对象。我们首先定义了S4类“Person”。这个类在namebirth槽中记录了一个人的姓名和生日。

下面的代码案例在Rcpp中创建了一个Person类,然后给该类的槽赋值。

执行结果