2016-09-30 58 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

一直在寻找解决我的问题的日子。谢谢 –

相关问题