2016-09-30 4 views
1

R에 트리로 사용하기 위해 자체를 포함 할 수도 있고 포함하지 않을 수도있는 클래스가 필요합니다. 모든 노드에는 Side, Analytical_Matrix, MaxChi2 및 P가 있으며 모든 노드는 Node 유형입니다.R (트리 용)에 자신을 포함하는 클래스를 어떻게 설정할 수 있습니까?

처음 노드를 만들 때 Sons가 비어 있거나 NULL이어야합니다. 그러나 나중에 나는 그들을 창조하고 그들을 아들들로 세운다. (나는 최대 3 명의 아들이있다).

나는 클래스를 설정하는이 시도 :

setClass(Class = "Node",slots=c(Side="character",Analytical_matrix="data.frame",MaxChi2="data.frame",P="numeric",TerminalNode="logical",LSon="Node",CSon="Node",RSon="Node"),prototype = prototype(LSon=NULL,CSon=NULL,RSon=NULL)) 

그리고이 새 클래스의 인스턴스를 선언합니다. 오류가 발생했습니다. 나는 아들들이 항상 비어 있어야합니다. 왜냐하면 아들들을위한 아들들을 항상 찾고 있기 때문입니다.

Res=new(Class = "Node",Side=c("A","B"),Analytical_Matrix=data.frame(A=c(1,2)),MaxChi2=data.frame(A=c(3)),P=0.3),NodoTerminal=FALSE) 
+0

저는 여기 새로워서 뭔가 명확하지 않은 경우 도움이됩니다. 나에게 인내심을 가져라. –

답변

1

"클래스 조합"을 통해 클래스가 슬롯 중 하나에 포함될 수 있습니다. 여기에 우리가 같은 클래스가 될하려는 id 정수 슬롯 클래스와 parent 슬롯의 간단한 예입니다 :

setClass("myObject",representation(
    parent="myObject_or_NULL", 
    id="integer" 
),prototype=prototype(
    parent=NULL 
)) -> myObject 

setClassUnion("myObject_or_NULL",c("myObject","NULL")) 

은 위의 "myObject_or_NULL는"정의되지 않는다는 경고를 생성합니다,하지만 그건 경고 만하고 오류는 아닙니다. 이제

, 우리는 새로운 일을 시도 할 경우 : 기본이 NULL 때문에

myObject() 

An object of class "myObject" 
Slot "parent": 
NULL 

Slot "id": 
integer(0) 

우리는 더 이상 재귀 루프가 없습니다. 인스턴스화 된 후에는 원하는대로 슬롯을 설정할 수 있습니다.

+0

내 문제에 대한 답을 찾기위한 날을 찾고 있었다. 고맙습니다 –