在对mlr3学习的过程中,有一个问题一直萦绕在我的心头,她就是对象,虽然之前的文章,我们从python的角度介绍了对象。但是突然之前在R语言中也出现了对象,充分说明,对于语言来说,一切皆为对象,事物发展的方向也是对象,所以,单身是发展不久的。
我们所谓的面向对象是指的实际操作的对象,但是在进行编码的时候我们针对的是类的概念,比如下面的例子
类class(人)=>子类class(学生)=>对象object(李小龙)
类包含两个特点
面向对象的三个特定
具体的逻辑架构和解释不做说明,在本文中主要对R6做说明,R6其实是一个单独的程序包,R6更加轻便,依赖较少,因此广泛使用,包括我们此次使用到的mlr3包,它就是基于R6实现的。
R6Class(
classname=NULL,public=list(),
private=NULL,activate=NULL,
inherit=NULL,lock=TRUE,
class=TRUE,portable=TRUE,
parent_env=parent.frame())
实例
Person <- R6Class("Person",# 类名
# 公共属性
public=list(
# 定义方法
hello = function(){
print(paste("hello"))
}
))
Person # 查看定义
## <Person> object generator
## Public:
## hello: function ()
## clone: function (deep = FALSE)
## Parent env: <environment: R_GlobalEnv>
## Locked objects: TRUE
## Locked class: FALSE
## Portable: TRUE
# 实例化类
u1 <- Person$new()
u1
## <Person>
## Public:
## clone: function (deep = FALSE)
## hello: function ()
R6Class()
建立,特别是使用new方法。例如foo = Foo$new(bar = 1)
为类Foo建立了新的对象foo,并将参数bar设置为1foo$bar
,也可以使用foo$bar = 2
对参数进行更改$train
,支持对训练集训练,并返回训练好的模型,存储与对象中foo2 = foo
不会在foo2中创建foo的副本,而是创建对同一实际对象的另一个引用。设置fooşbar = 3
也将改变foo2Sbar 3
,反之亦然。$clone()
方法复制,对于深拷贝,设置deep = TRUE
(适用于嵌套对象),例如,foo2 = foo$clone(deep = TRUE)
对于R6的面向对象来说是一个单独的章节,目前没有较大的兴趣去更新,只是在mlr3学习的过程中去瞅了一眼,后面在决定更新与否。
love&peace