R - 将列表元素作为函数调用的参数传递

Jul*_*ian 5 parameters r

让我们从一些简单的代码开始:

require(randomForest)
randomForest(mpg~.,mtcars,ntree=10)
Run Code Online (Sandbox Code Playgroud)

这构建了一个由10棵树组成的随机森林.

我想要的是将参数存储在列表中,而不是进行函数调用.像这样的东西:

require(randomForest)
l<-list(ntree=10)
randomForest(mpg~.,mtcars,l[[1]])
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用.错误消息是:

Error in if (ncol(x) != ncol(xtest)) stop("x and xtest must have same number of columns") : argument is of length zero
Run Code Online (Sandbox Code Playgroud)

这表明randomForest的参数xtest = NULL设置为10而不是ntree.

这是为什么?如何将参数ntree作为列表元素传递?

谢谢.

lmo*_*lmo 6

您可以使用它do.call来完成此操作,但您必须调整输入参数的方式.

do.call(randomForest, list(formula=as.formula(mpg~.), data=mtcars, ntree=10))
Run Code Online (Sandbox Code Playgroud)

打印输出不是很漂亮,但最后,你得到

               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
Run Code Online (Sandbox Code Playgroud)

如果保存返回的对象,它将具有与键入时相同的值.

您也可以提前存储列表

l <- list(formula=as.formula(mpg~.), data=mtcars, ntree=10)
myForest <- do.call(randomForest, l)
Run Code Online (Sandbox Code Playgroud)