2011-05-26 41 views
1

我是一个R新手,我想知道是否可以创建自己的类的对象。当我阅读“帮助(类)”时,似乎并不像Java中的类是可能的。我的意思是我想拥有一个包含方法,私有变量和构造函数的类。例如,它可能看起来像这样:R中可能有自己类的对象吗?

className <- class { 
    # private variables 
    var1 <- "standardvalue" 

    var2 <- TRUE 
    # Constructor 
    constructor (v1, v2) { 
    var1 <- v1 
    var2 <- v2 
    } 

    # Method 1 
    function sum() { 
    var1 + var2 
    } 

    # Method 2 
    function product() { 
    var1 * var2 
    } 
} 

在我的主要PROGRAMM我想创建这个类的一个对象,并调用它的功能。例如像这样:

# Create Object 
numbers <- className(10,7) 

# Call functions of the Object 
numbers -> sum()  # Should give "17" 
numbers -> product() # Should give "70" 

是这样的可能吗?到目前为止,我没有任何例子。

感谢您的帮助。

+0

Introduction to R手册的[Object Orientation](http://cran.r-project.org/doc/manuals/R-intro.html#Object-orientation)部分将您引用到[R语言定义](http://cran.r-project.org/doc/manuals/R-lang.html)手册。 [第5节](http://cran.r-project.org/doc/manuals/R-lang.html#Object_002doriented-programming)讨论了面向对象的编程。 – 2011-05-26 18:30:09

回答

4

是的,有(至少)3个OO系统从在基础R进行选择:

  • S3
  • S4
  • ReferenceClasses

加上附加OO状框架贡献通过CRAN软件包如proto。

请为S3,S4,ReferenceClasses,OO,...做一些Google搜索,可能从rseek.org开始。所有R编程书籍都涵盖了这一点;我最喜欢的是钱伯斯(Chambers)(2008)的书“数据分析软件”。

+0

除了对于任何书都太新的参考类(据我所知)。内置的文档虽然不错。 – hadley 2011-05-27 22:27:14

0

如果来自java,因此被用来privatepublic属性和方法,我建议你使用R6包。见link。从文档中取得的个人类的简单的例子是这样的:

library(R6) 
Person <- R6Class("Person", 
    public = list(
    name = NA, 
    hair = NA, 
    initialize = function(name, hair) { 
     if (!missing(name)) self$name <- name 
     if (!missing(hair)) self$hair <- hair 
     self$greet() 
    }, 
    set_hair = function(val) { 
     self$hair <- val 
    }, 
    greet = function() { 
     cat(paste0("Hello, my name is ", self$name, ".\n")) 
    } 
) 
) 

这里是你如何创建这个类的一个实例:

johnDoe <- Person$new("John Doe") 
johnDoe$set_hair("brown") 

注意,与java方法是使用$操作者调用对象之后。

相关问题