2011-05-26 22 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方法是使用$操作者調用對象之後。

相關問題