2012-01-10 4 views
1

나는 자신에게 R을 가르치고있다. 구체적인 패키지는 Binary Tree입니다. 이 페이지의 예제가 작동하면 터미널 노드에서 부모 노드로 트리를 이동하려고합니다. 이 특정 패키지에는 내가 원하는 것을 수행 할 getParent() 함수/메소드 (식별 할 수 있음)가없는 것 같습니다.R에서 나무를 걸어 오는 방법?

그래서 나는 나무를 다른 객체로 변환해야한다고 생각했다 : 그래프, 텍스트 문자열의 배열, 뭐든간에, 나는 내가 찾고있는 것을 찾기에 충분히 좋은 google-fu를 갖고있는 것처럼 보이지 않는다. 나는 여전히 문서를 둘러 볼 길을 찾고있다.

그렇다면 그가하는 일을 아는 사람이 웹 페이지의 예에서 트리를 어떻게 움직일 수 있습니까?

+1

더주의 깊게 읽어 보시기 바랍니다 ;-) 걸어보다 나무 "BinaryTree 클래스 {자}". 바이너리 트리 패키지가 아닙니다. –

답변

3

글쎄, 다음은 트리를 가로 지르고 각 노드에 부모를 추가하는 기능입니다.

addParent <- function(n, parent = NULL) { 
    n$parent <- parent 
    if (!n$terminal) { 
     n$left <- Recall(n$left, n) 
     n$right <- Recall(n$right, n) 
    } 
    n 
} 

# Example usage 
airq <- subset(airquality, !is.na(Ozone)) 
airct <- ctree(Ozone ~ ., data = airq, 
       controls = ctree_control(maxsurrogate = 3)) 
[email protected] <- addParent([email protected]) 
leaves <- nodes(airct, unique(where(airct))) 
leaves[[1]]  # node 5 
leaves[[1]]$parent # node 4 

# And here's a way to "walk up the tree" 
walkUp <- function(n) { 
    cat("Node", n$nodeID, "\n") 
    n <- n$parent 
    if(!is.null(n)) Recall(n) 
} 

for(n in leaves) { cat("---\n"); walkUp(n) } 

은 BTW, 나는 거라고 생각보다는 상승 최대가

+0

나는 여기에 씹을 것이 많다! 감사! – user63741

관련 문제