2013-03-06 1 views
5

고유 한 기능 (예 : 최대 값에 대한 게터)이있는 R에 새 객체 클래스를 정의하고 싶습니다. R에서 이것을 실현할 수 있습니까? 내가 좋아하는 뭔가 생각 : 당신이 시작하는자신의 메서드가있는 객체 클래스를 정의 할 수 있습니까? R

test <- class() { 
    len = 0  # object variable1 

    __constructor(length=0) { 
    len = length # set len 
    } 

    getLength <- function() { 
    len # return len 
    } 
} 

ob = test(20) # create Objectof class test 
ob.getLength() # get Length-Value of Object 
+2

어쩌면 당신은 DevTools로 위키의 "객체 지향 프로그래밍"절을 읽어야합니다 : //github.com/hadley/devtools/wiki – juba

+4

R에는 'S3', 'S4', O5의 'R5'개념이 있습니다. 하나를 선택하고 자신의 기능 (S3) 또는 메소드 (S4, R5)를 정의해야합니다. [** 여기 **] (https://github.com/hadley/devtools/wiki/S3) 시작 – Arun

+0

... 관련 : http://stackoverflow.com/questions/9521651/r-and-object-oriented -프로그램 작성 –

답변

8

, 내가 S3 클래스와 예제를주지 : 이제

# create an S3 class using setClass: 
setClass("S3_class", representation("list")) 
# create an object of S3_class 
S3_obj <- new("S3_class", list(x=sample(10), y=sample(10))) 

을, 당신은 기능 - 수 과부하 내부 함수, 예를 들어, 귀하의 클래스에 length 기능 (마찬가지로 operator-overload 수 있습니다) :

0 같은 (

len <- function(x) { 
    if (class(x) != "S3_class") { 
     stop("object not of class S3_class") 
    } 
    sapply(x, length) 
} 

> len(S3_obj) 
# x y 
# 10 10 

> len(1:10) 
# Error in len(1:10) : object not of class S3_class 

S4를 설명하기 조금 어렵다 :

length.S3_class <- function(x) sapply(x, length) 
# which allows you to do: 
length(S3_obj) 

# x y 
# 10 10 

또는 양자 택일로, 당신은 어떤 이름, 당신은 객체 클래스 S3_class의 경우 확인하고 뭔가를 할 수와 자신의 기능을 할 수 있습니다 S3) 알고 있어야 할 용어와 것들이 상당히 많기 때문에 (어렵지도 않고 전혀 다른 것도 아닙니다). 나는 당신이 그 (그리고 S3에 대한 코멘트 아래 제공된 링크를 통해, 여기에 내 목적은 어떻게 완료의 예를 보여 주었다) 제안했다.

6

R도 아주 능숙하게 당신의 예에 맞는 함수 클로저을 가지고

test = function() { 
    len = 0 
    set_length = function(l = 0) len <<-l 
    get_length = function() len 
    return(list(set_length=set_length, get_length=get_length)) 
} 

이 제공 : HTTPS :

R> m = test() 
R> m$set_length(10) 
R> m$get_length() 
[1] 10 
R> m$set_length() 
R> m$get_length() 
[1] 0 
관련 문제