2016-11-25 63 views
1

让我们先从一些简单的代码:的R - 列表作为参数的传递元素函数调用

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

感谢。它的确如此,但我想在列表中指定应该设置哪个参数。 – Julian

回答

2

您可以使用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) 
相关问题