dunner
2012-Jun-15 20:27 UTC
[R] argument "x" is missing, with no default - Please help find argument x
R programming question, not machine learning, although that's the content. Apologies to all for whom the following code is eye-burning. I am using foreach() to run a simulation on a randomForest model (actually conditional randomForest ... "party" package). The simulation is in two dimensions. examining how "mtry" and "ntrees" are related in terms of predictive accuracy in ten-fold cross validation. My problem is one of functional programming. The "loops" for simulation are functionalised so they can be passed to foreach and bundled of to my 4 cores. However, I'm making a mess of passing in arguments - I think. I get the following error message : Error in toploop(ntrees = ntrees, ml.frame = ml.frame) : task 2 failed - "argument "x" is missing, with no default" as if it couldn't see the arguments. Long segment of actual code below. Thank you for your time and patience. Ross <code> bottomloop<-function(i=i, mtry=mtry, rownumber=rownumber, ntrees=ntrees, shuffled=shuffled) { require(party) require(epiR) test<-rownumber[[i]] train<-shuffled[shuffled!=test] cv.train <- ml.frame[train,] cv.evaluate <- ml.frame[test,] cv.model <- cforest(as.factor(remitter)~., data=cv.train, control=cforest_control(mtry=mtry, ntree=ntrees, mincriterion=0.95)) cv.evaluate$prediction <- predict(cv.model, newdata=cv.evaluate) obj.pred<-predict(cv.model) pred.table<-table(cv.evaluate$prediction, cv.evaluate$remitter) truepos<-pred.table[1,1] trueneg<-pred.table[2,2] falsepos<-pred.table[2,1] falseneg<-pred.table[1,2] sumvar<-epi.tests(c(truepos, falsepos , falseneg, trueneg), verbose=T) epi.tests(c(truepos, falsepos , falseneg, trueneg), verbose=F) # Calculate the overall accuracy. cv.evaluate$correct <- cv.evaluate$prediction == cv.evaluate$remitter mymean<-mean(cv.evaluate$correct) retlist<-data.frame(mtry, sumvar$se, sumvar$sp, mean(cv.evaluate$correct)) return(retlist) } subloop<- function(mtry=mtry, ml.frame=ml.frame, ntrees=ntrees) { nfolds<- 10 # shuffle the numbers and divide into 10 groups numberOfRows<-dim(ml.frame)[1] lengthOfDiv<-numberOfRows/nfolds shuffled<-sample(c(1:numberOfRows), numberOfRows, replace=F) rownumber<-split(shuffled, 1:nfolds) #combine mymean into my vec myvec<-foreach (i = 1:length(rownumber), .combine="rbind") %dopar% bottomloop(i, mtry = mtry, rownumber=rownumber, ntrees=ntrees, shuffled=shuffled) #print(myvec) return(myvec) } toploop <- function (ntrees=ntrees, ml.frame=ml.frame) { require(foreach) require(ggplot2) require(reshape) require(foreign) mtry = c(5:25) ddd<-foreach(mtry, .combine="rbind") %dopar% subloop (mtry=mtry, ml.frame=ml.frame, ntrees=10) ddd<-as.data.frame(ddd) mdd<-melt(ddd, id="mtry") g <- ggplot(mdd, aes(mtry, value)) pdf(file=paste(ntrees, "-trees.pdf")) g + geom_point(aes(colour=as.factor(variable))) + geom_smooth(aes(group=as.factor(mdd$variable), colour=as.factor(mdd$variable)), size=1.2) dev.off() write.csv(file=paste(ntrees, "-trees.csv")) } ntrees=c(1,2,3) foreach(ntrees, .combine="cbind" ) %dopar% toploop (ntrees=ntrees, ml.frame=ml.frame)> foreach(ntrees, .combine="cbind" ) %dopar% toploop (ntrees=ntrees, > ml.frame=ml.frame)bottomloop<-function(i=i, mtry=mtry, rownumber=rownumber, ntrees=ntrees, shuffled=shuffled) { require(party) require(epiR) test<-rownumber[[i]] train<-shuffled[shuffled!=test] cv.train <- ml.frame[train,] cv.evaluate <- ml.frame[test,] cv.model <- cforest(as.factor(remitter)~., data=cv.train, control=cforest_control(mtry=mtry, ntree=ntrees, mincriterion=0.95)) cv.evaluate$prediction <- predict(cv.model, newdata=cv.evaluate) obj.pred<-predict(cv.model) pred.table<-table(cv.evaluate$prediction, cv.evaluate$remitter) truepos<-pred.table[1,1] trueneg<-pred.table[2,2] falsepos<-pred.table[2,1] falseneg<-pred.table[1,2] sumvar<-epi.tests(c(truepos, falsepos , falseneg, trueneg), verbose=T) epi.tests(c(truepos, falsepos , falseneg, trueneg), verbose=F) # Calculate the overall accuracy. cv.evaluate$correct <- cv.evaluate$prediction == cv.evaluate$remitter mymean<-mean(cv.evaluate$correct) retlist<-data.frame(mtry, sumvar$se, sumvar$sp, mean(cv.evaluate$correct)) return(retlist) } subloop<- function(mtry=mtry, ml.frame=ml.frame, ntrees=ntrees) { nfolds<- 10 # shuffle the numbers and divide into 10 groups numberOfRows<-dim(ml.frame)[1] lengthOfDiv<-numberOfRows/nfolds shuffled<-sample(c(1:numberOfRows), numberOfRows, replace=F) rownumber<-split(shuffled, 1:nfolds) #combine mymean into my vec myvec<-foreach (i = 1:length(rownumber), .combine="rbind") %dopar% bottomloop(i, mtry = mtry, rownumber=rownumber, ntrees=ntrees, shuffled=shuffled) #print(myvec) return(myvec) } toploop <- function (ntrees=ntrees, ml.frame=ml.frame) { require(foreach) require(ggplot2) require(reshape) require(foreign) mtry = c(5:25) ddd<-foreach(mtry, .combine="rbind") %dopar% subloop (mtry=mtry, ml.frame=ml.frame, ntrees=100) ddd<-as.data.frame(ddd) mdd<-melt(ddd, id="mtry") g <- ggplot(mdd, aes(mtry, value)) pdf(file=paste(ntrees, "-trees.pdf")) g + geom_point(aes(colour=as.factor(variable))) + geom_smooth(aes(group=as.factor(mdd$variable), colour=as.factor(mdd$variable)), size=1.2) dev.off() write.csv(file=paste(ntrees, "-trees.csv")) } ntrees=c(1,2,3) foreach(ntrees, .combine="cbind" ) %dopar% toploop (ntrees=ntrees, ml.frame=ml.frame) ### following error ###> foreach(ntrees, .combine="cbind" ) %dopar% toploop (ntrees=ntrees, > ml.frame=ml.frame)Error in toploop(ntrees = ntrees, ml.frame = ml.frame) : task 2 failed - "argument "x" is missing, with no default" </code> -- View this message in context: http://r.789695.n4.nabble.com/argument-x-is-missing-with-no-default-Please-help-find-argument-x-tp4633551.html Sent from the R help mailing list archive at Nabble.com.