2016-09-30 77 views
1

我需要一個可能包含也可能不包含它自己的類,以便在R中用作樹。 每個節點都有Side,Analytical_Matrix,MaxChi2和P以及Sons也是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」沒有定義的警告,但它的只是一個警告而不是一個錯誤。

現在,如果我們試圖讓一個新問題:

myObject() 

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

Slot "id": 
integer(0) 

我們沒有遞歸循環了,因爲默認爲NULL。實例化後,您可以將插槽設置​​爲任何您喜歡的,當然。

+0

一直在尋找解決我的問題的日子。謝謝 –

相關問題