前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mlr3_R6对象

mlr3_R6对象

作者头像
火星娃统计
发布2021-01-19 12:14:26
7050
发布2021-01-19 12:14:26
举报
文章被收录于专栏:火星娃统计

mlr3_R6对象

概述

在对mlr3学习的过程中,有一个问题一直萦绕在我的心头,她就是对象,虽然之前的文章,我们从python的角度介绍了对象。但是突然之前在R语言中也出现了对象,充分说明,对于语言来说,一切皆为对象,事物发展的方向也是对象,所以,单身是发展不久的。

什么是面向对象

  • 人脑思维:面向对象(按照问题整体思考,也就是将工作打包) 优点:节约开发者和设计者的时间 缺点:运行效率慢
  • 电脑思维:面向过程(按照先后顺序执行)

我们所谓的面向对象是指的实际操作的对象,但是在进行编码的时候我们针对的是类的概念,比如下面的例子

类class(人)=>子类class(学生)=>对象object(李小龙)

类包含两个特点

  • 属性:一个物体具有的信息,在语言中相当于变量
  • 方法:类进行的操作,相当于语言中的函数

面向对象的三个特定

  • 封装:只需要了解接口,不需要对内部进行处理
  • 继承:学生继承了人的特点,学生为子类,人为父类
  • 多态:相同的函数可以作用不同的类,类的不同产生不同的结果

目前R中的面向对象结构

  • 基于S3
  • 基于S4
  • 基于RC(R5)
  • 基于R6

具体的逻辑架构和解释不做说明,在本文中主要对R6做说明,R6其实是一个单独的程序包,R6更加轻便,依赖较少,因此广泛使用,包括我们此次使用到的mlr3包,它就是基于R6实现的。

R6的一些操作

创建类

代码语言:javascript
复制
R6Class(
    classname=NULL,public=list(),
    private=NULL,activate=NULL,
    inherit=NULL,lock=TRUE,
    class=TRUE,portable=TRUE,
    parent_env=parent.frame())
  • classname 类的名字
  • public 公共属性和方法
  • private 私有属性和方法
  • active
  • inherit 父类
  • lock 上锁
  • class 是否封装
  • portable 可移植性
  • parent_env

实例

代码语言:javascript
复制
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 ()

在mlr3中

  • 对象是通过R6Class()建立,特别是使用new方法。例如foo = Foo$new(bar = 1)为类Foo建立了新的对象foo,并将参数bar设置为1
  • 类是可变的:通过美元符号进行访问foo$bar,也可以使用foo$bar = 2对参数进行更改
  • 除了字段之外,对象还可以改变内部的其他信息,比如learner的$train,支持对训练集训练,并返回训练好的模型,存储与对象中
  • 对象有私有字段和公共字段。在mlr3中,只能访问公共字段。私有字段只能在扩展的mlr3中使用,也就是非内置数据
  • R6变量是对对象的引用,而不是存储在环境中的实际对象。例如,foo2 = foo不会在foo2中创建foo的副本,而是创建对同一实际对象的另一个引用。设置fooşbar = 3也将改变foo2Sbar 3,反之亦然。
  • 复制一个对象:使用$clone()方法复制,对于深拷贝,设置deep = TRUE(适用于嵌套对象),例如,foo2 = foo$clone(deep = TRUE)

结束语

对于R6的面向对象来说是一个单独的章节,目前没有较大的兴趣去更新,只是在mlr3学习的过程中去瞅了一眼,后面在决定更新与否。

love&peace

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 火星娃统计 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • mlr3_R6对象
    • 概述
      • 什么是面向对象
        • 目前R中的面向对象结构
          • R6的一些操作
            • 创建类
          • 在mlr3中
            • 结束语
            相关产品与服务
            对象存储
            对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档