Oh. I forgot one extra-function:

pop.stack<-function(v){
        if(length(v)==0){x=NA}
        if(length(v)==1){x=v[1]; v=c()}
        if(length(v)>1){x=v[1]; v=v[2:length(v)]}
        return(list(vector=v,x=x))
}

Atte

> Hi,
> 
> Is it possible to break using if-condition during the recursive 
> function?
> Here is a function which almost works. It is for inorder-tree-walk. 
> 
> iotw<-function(v,i,Stack,Indexes) # input: a vector and the first 
> index (1), Stack=c(), Indexes=c().
> {
>       print(Indexes)
>       # if (sum(i)==0) break # Doesn't work...
>       
>       if (is.na(v[i])==FALSE & is.null(unlist(v[i]))==FALSE)
>               {Stack=c(i,Stack); i=2*i; iotw(v,i,Stack,Indexes)}
>       Indexes=c(Indexes,Stack[1])
>       Stack=pop.stack(Stack)$vector
>       Indexes=c(Indexes,Stack[1])
>       i=2*Stack[1]+1
>       Stack=pop.stack(Stack)$vector
>       iotw(v,i,Stack,Indexes)
> }
> 
> 
> > v=c(`-`,`+`,1,`^`,`^`,NA,NA,"X",3,"X",2)
> > Stack=c()
> > Indexes=c()
> 
> > iotw(v,1,Stack,Indexes)
> NULL
> NULL
> NULL
> NULL
> NULL
> [1] 8 4
> [1] 8 4
> [1] 8 4 9 2
> [1] 8 4 9 2
> [1] 8 4 9 2
> [1]  8  4  9  2 10  5
> [1]  8  4  9  2 10  5
> [1]  8  4  9  2 10  5 11  1
> [1]  8  4  9  2 10  5 11  1
> [1]  8  4  9  2 10  5 11  1  3
> Error in if (is.na(v[i]) == FALSE & is.null(unlist(v[i])) == FALSE) 
> { : 
>       argument is of length zero
> 
> Regards,
> 
> Atte Tenkanen
> University of Turku, Finland
>

______________________________________________
[email protected] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to