R 将部分参数列表传递给do.call()
我正在尝试编写一个函数来测试GBM模型的一系列超参数。我只希望GBM调用中的三个参数不同。其余的我想是静态的R 将部分参数列表传递给do.call(),r,R,我正在尝试编写一个函数来测试GBM模型的一系列超参数。我只希望GBM调用中的三个参数不同。其余的我想是静态的do.call似乎是答案,因为它接受一系列参数并将它们传递到函数中。然而,我不知道是否有办法“修正”一些我永远不想改变的论点 parms <- list( 'interaction.depth'=1:5, 'n.trees'=c(500,1000,2000), 'shrinkage'=c(0.01, 0.005, 0.001)) res <-expand.grid(parms
do.call
似乎是答案,因为它接受一系列参数并将它们传递到函数中。然而,我不知道是否有办法“修正”一些我永远不想改变的论点
parms <- list(
'interaction.depth'=1:5,
'n.trees'=c(500,1000,2000),
'shrinkage'=c(0.01, 0.005, 0.001))
res <-expand.grid(parms)
> head(res)
interaction.depth n.trees shrinkage
1 1 500 0.01
2 2 500 0.01
3 3 500 0.01
4 4 500 0.01
5 5 500 0.01
6 1 1000 0.01
do.call
需要一个列表作为其第二个参数。您可以将列表与c
组合。
下面的表达式使用数据的第一行创建一个包含元素a
、b
和res
的命名列的列表:
c(list(a=1, b=2), as.list(res[1,]))
所需的apply
表达式如下所示:
apply(res, 1, function(row) do.call('gbm', c(list(a=1, b=2), as.list(row))))
您可以使用
plyr
软件包中的m*ply
功能。要返回gbm
型号列表,请执行以下操作:
gbm.list <- mlply(res, gbm, formula = Y~X1+X2+X3+X4+X5+X6, data = data)
gbm.list
gbm.list <- mlply(res, gbm, formula = Y~X1+X2+X3+X4+X5+X6, data = data)