2016-09-30 4 views
1

Мне нужен класс, который может содержать или не содержать себя, для использования в качестве дерева в R. Каждый узел имеет Side, Analytical_Matrix, MaxChi2 и P и Sons также имеют тип Node.Как я могу создать класс, содержащий себя в R (для дерева)?

В первый раз, когда создан узел, мне нужны сыновья, чтобы они были пустыми или 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

Ищете дни для ответа на мои проблемы. спасибо –

 Смежные вопросы

  • Нет связанных вопросов^_^