让我们从一些简单的代码开始:
require(randomForest)
randomForest(mpg~.,mtcars,ntree=10)
这会构建一个包含10棵树的随机森林。
我想要的是将参数存储在列表中,而不是进行函数调用。像这样:
require(randomForest)
l<-list(ntree=10)
randomForest(mpg~.,mtcars,l[[1]])
然而,这不起作用。错误消息是:
Error in if (ncol(x) != ncol(xtest)) stop("x and xtest must have same number of columns") : argument is of length zero
这表示randomForest的参数xtest = NULL设置为10而不是ntree。
为什么?如何将参数ntree作为列表元素传递?
谢谢。
答案 0 :(得分:6)
您可以使用do.call
来完成此操作,但您必须调整输入参数的方式。
do.call(randomForest, list(formula=as.formula(mpg~.), data=mtcars, ntree=10))
打印输出不是很漂亮,但最后,你得到了
Type of random forest: regression
Number of trees: 10
No. of variables tried at each split: 3
Mean of squared residuals: 9.284806
% Var explained: 73.61
如果您保存返回的对象,它将具有与您键入时相同的值。
您也可以提前存储列表
l <- list(formula=as.formula(mpg~.), data=mtcars, ntree=10)
myForest <- do.call(randomForest, l)