• R手册(Common)--R6 and S4


    R 主要面向统计计算,似乎很少会用到面向对象的编程方法。但在统计计算中,在下列情形中使用面向对象的编程方法可以编程更有效率。

    R 的面向对象 (OOP) 是基于泛型函数 (generic function) 的,而不是基于类层次结构

    1
    2
    3
    4
    library(R6)


    R6Class(classname = NULL, public = list(), private = NULL,active = NULL, inherit = NULL, lock = TRUE, class = TRUE,portable = TRUE, parent_env = parent.frame())

    参数列表:

    classname:定义类名。
    public:定义公有成员,包括公有方法和属性。
    privat:定义私有成员,包括私有方法和属性。
    active :主动绑定的函数列表。
    inherit:定义父类,继承关系。
    lock:是否上锁,如果上锁则用于类变量存储的环境空间被锁定
    class:是否把属性封装成对象,默认是封装,如果选择不封装,类中属性存存在一个环境空间中。
    portable:是否为可移植类型,默认是可移植型类,类中成员访问需要用调用self和private对象。
    parent_env:定义对象的父环境空间。

    1
    2
    3
    `$new()` # 实例化函数
    `$set()` # R6类的动态绑定
    `print()` # 输出R6默认方法

    面向对象S4类

    大专栏  R手册(Common)--R6 and S4"#自定义s4类"> 自定义S4类

    1
    myClass <-setClass(Class, slots=list(),prototype,contains=character(), validity) )

    属性用@访问

    参数列表

    Class: 定义类名
    slots: 定义属性和属性类型,列表
    prototype: 定义属性的默认值
    contains: 定义父类,继承关系
    validity: 定义属性的类型检查

    实例化函数

    1
    new(Class,...)

    S4的泛型函数

    • 通过setGeneric()来定义接口
    1
    2
    3
    setGeneric(name,def)
    # def指定了形式参数,并成为默认方法。
    # name通用函数的字符串名称
    • 通过setMethod()来定义现实类
    1
    2
    3
    4
    setMethod(f,signature=character(),definition)
    # f:通用函数的字符串名称
    # signature:一些参数需要的类
    # definition:一个定义的函数
  • 相关阅读:
    二叉树计数2(卡特兰数+高精乘低精+高精除低精)
    奶牛的身高(差分约束)
    海底高铁(差分)
    假期(动态规划+单调队列)
    RY哥查字典(字符串双模hash初步)
    元素查找(hash初步)
    【模板】单源最短路径 堆优化的dijkstra
    【模板】单源最短路径spfa
    【并查集】noi2001食物链
    【带权并查集】银河英雄传说
  • 原文地址:https://www.cnblogs.com/lijianming180/p/12402370.html
Copyright © 2020-2023  润新知