Hi, >> I am interested in using R for machine learning (supervised classification). >> Currently, I have been investigating especially the rpart, tree, and randomForest package, and have >> achieved first results. >> >> are there any experiences, how the learned classificators could >> be used in e.g. C ? >> in other words, I want to "transfer" the learned predictor from R >> to C-code. > >You could use dput to write the representation to a file, and read it >from >C. Parsing could be nasty, though, so I would prefer to extract the >relevant information (e.g. fit$cptable and fit$splits in the rpart >example), >and write it to a database in numeric form with additional information >if >required. Another option could be XML (package XML), and using one of >the >many XML libraries in C(++). >
thanks for your answer. actually, taking a closer look at the representations of rpart or randomForest, I came to a much simpler and straight-forward solution: with only a couple of lines, the corresponding c-code for a tree can be emitted. e.g. for randomForest: ## generate C code from rforests. generate code for tree k gen_code=function(rfobj,k) { tree=getTree(rfobj,k,labelVar=TRUE); count=0; loc.env=environment(); visit=function(idx) { assign('count',count+1,env=loc.env); if (tree[idx,'status']==-1) cat(sprintf("RETURN(%s)\n",tree[idx,'prediction'])) else { cat(sprintf("if (GETVAR(%s)<=%f) {\n",tree[idx,'split var'],tree[idx,'split point'])); visit(tree[idx,'left daughter']); cat("} else {\n"); visit(tree[idx,'right daughter']); cat("}\n"); } } visit(1); if (count != nrow(tree)) stop("Invalid tree in ", deparse(substitute(rfobj))) } however, if this is computed for 500 trees, maybe a more efficient way to compute the result for one tree could be necessary regards lars ______________________________________________ R-help@r-project.org 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.