2012-11-10 2 views
2

기본적으로 벡터의 모든 요소에 '시작 시간'과 '종료 시간'이라는 두 가지 추가 특성이 있다는 점을 제외하고는 기본적으로 벡터 클래스와 같아야하는 R 클래스의 새 클래스를 만들고 싶습니다. 기능의 일부는 모든 종류의 기존 인덱싱이어야합니다. 적어도 여기에 코드의 비트를 제공벡터와 같은 색인 생성을 허용하는 R에서 S4 클래스를 만드는 방법은 무엇입니까?

내가 뭘하려 :

setClass(
     Class = "Intervals", 
     representation = representation(
     start.time = "POSIXct", 
     end-time = "POSIXct", 
     numbers = "numeric"), 
     contains = "vector" 
    ) 

이 분명히 작동하지 않습니다 가입일

iv <- function(start.time, end.time, numbers) { 
    new(Class="Intervals", start.time = start.time, 
     end.time = end.time, numbers = numbers) 
} 

st <- seq(1,5)*3600+as.POSIXct("1970-01-01 01:00") 
et <- seq(2,6)*3600+as.POSIXct("1970-01-01 01:00") 
numbers <- c(1,2,3,4,5) 
example <- iv(st,et,numbers) 

예 [1 일 이후 : 3] 예 나에게 NA NA 제공.

아니면 내가

setMethod(
    f = "[", 
    signature="Intervals", 
    definition=function(x,i,j,drop){ 
... 

같은 것을 시작으로 자신에 의해 게터를 작성해야? 물론 나는 인수 x, i, j를 올바르게 처리하는 방법을 모르기 때문에 이것을 피하고자했습니다.

슬롯 'numbers'가 필요합니까? 나를 생략 할 수있는 가상 클래스 벡터로부터 상속하는 방법이 있나요? 또한 나는 수치 값을 포함하는 벡터에 구조를 제약하고 싶지 않다.

이 질문이 너무 사소한 것은 아니지만 책과 pdfs에서 다른 장을 읽고 혼자 해결책을 찾는다.

미리 감사드립니다.

미카

+0

직접 작성해야하지만 개별 인수의 하위 집합 인수를 전달할 수 있으므로 상당히 간단합니다. – hadley

+0

어쩌면 [이 질문] (http://stackoverflow.com/questions/10961842/how-to-define-the-subset-operators-for-a-s4-class) 충분히 가깝습니까? –

+0

예. 나는 그것을 게시 한 후 10 분 (불행하게도) 발견했다. –

답변

2

확인. 한편 나는 (일부 이름 변경 후)을 마련하기 위해 (How to define the subset operators for a S4 class?의 도움으로) 관리 : 사람이 관심

setMethod(
    f = "[", 
    signature="Intervals", 
    definition=function(x,i,j,...,drop=TRUE){ 
    initialize(x, [email protected][i], [email protected][i], values = [email protected][i]) 
    } 
) 

그냥 경우 ... 쇼 방법은 다음과 같습니다.

setMethod(
    f = "show", 
    signature="Intervals", 
    definition=function(object){ 
    rownames <- sapply(seq_along([email protected]), 
         function (i) paste([email protected][i], "--", [email protected][i])) 
    df.show <- data.frame([email protected], row.names = rownames) 
    names(df.show) <- ifelse(length(names([email protected])) == 0, 
          "Values", names([email protected])) 
    print (df.show) 
    } 
) 
관련 문제