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

6

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

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 作为列表元素传递?

谢谢。


谢谢。它确实可以,但我想在列表中指定应设置哪个参数。 - Funkwecker
1个回答

7
您可以使用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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接